刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

删除数字

题目描述:

老师在黑板上写了一个不超过 500 位的正整数 n(1≤n<10500),要求同学们删除其中任意 k 个数字, 剩余数字的顺序不变,希望得到的数最大。

例如:n = 69134,k = 2,从 69134 中删除 2 个数字,将第一位 6 和第三位 1 删除,得到的新数 934 是最大的。

输入描述:

输入两个整数 n 和 k(1≤n<10500,0≤k<n的位数),整数之间以一个空格隔开

输出描述:

输出一个整数,表示删除 k 个数字后,得到的最大数


样例输入:

69134 2

样例输出:

934

使用微信搜索喵呜刷题,轻松应对考试!

答案:

为了得到删除k个数字后的最大数,我们需要从左到右遍历数字n,对于每个位置,判断该位置的数字是否小于其右侧的数字。如果小于,说明该数字应该被删除,以保证剩余的数字组成的数最大。如果大于或等于,说明该数字应该被保留。重复这个过程,直到删除了k个数字或遍历完所有数字。最后,将剩下的数字按顺序组合起来,即可得到最大的数。

解析:

【喵呜刷题小喵解析】:
这个问题可以通过贪心算法来解决。我们从左到右遍历数字n,对于每个位置,判断该位置的数字是否小于其右侧的数字。如果小于,说明该数字应该被删除,以保证剩余的数字组成的数最大。如果大于或等于,说明该数字应该被保留。这样,我们就可以保证从左到右删除的是尽可能小的数字,从而得到最大的数。重复这个过程,直到删除了k个数字或遍历完所有数字。最后,将剩下的数字按顺序组合起来,即可得到最大的数。

具体实现时,我们可以使用一个栈来保存当前应该保留的数字。从左到右遍历数字n,对于每个位置,如果该位置的数字大于栈顶的数字,就将其入栈。否则,如果栈不为空且该位置的数字小于栈顶的数字,就弹出栈顶的数字,直到该位置的数字大于栈顶的数字或栈为空。这样,栈中保存的就是应该保留的数字。最后,将栈中的数字按顺序组合起来,即可得到最大的数。

需要注意的是,当n的位数小于k时,无法删除k个数字,此时应该输出n本身。另外,当遍历完所有数字后,如果删除的数字个数小于k,说明无法删除k个数字,此时应该输出已经遍历过的数字组成的最大数。
创作类型:
原创

本文链接:删除数字 题目描述: 老师在黑板上写了一个不超过 500 位的正整数 n(1≤n<10500),要求

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share