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

简答题

老师在黑板上写了一个不超过 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

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

答案:

对于这个问题,我们可以按照以下步骤来求解:1. 首先,将输入的整数n转换为字符串形式,方便后续处理。2. 从左到右遍历这个字符串,找到第一个出现k+1次的数字,记为x。3. 将x及其右侧的所有数字都删除,得到一个新的字符串。4. 将剩下的数字按照从大到小的顺序重新排列,得到最终的字符串。5. 将最终的字符串转换回整数形式,并输出。

解析:

【喵呜刷题小喵解析】:

这个问题的关键在于如何确定擦除哪些数字。一种直观的方法是,从左到右遍历字符串,每次遇到相同的数字就擦除,直到擦除k个数字。但是这种方法并不能保证得到的结果是最大的。

一个更好的方法是,从左到右遍历字符串,找到第一个出现k+1次的数字,记为x。然后将x及其右侧的所有数字都删除,得到一个新的字符串。这是因为,如果x不是第一个出现k+1次的数字,那么它右边的数字一定也是x,这意味着这些数字可以被擦除而不会影响结果。因此,将x及其右侧的所有数字都删除,然后将剩下的数字按照从大到小的顺序重新排列,就可以得到最大的结果。

这个算法的时间复杂度是O(n),其中n是字符串的长度。这是因为我们需要遍历一次字符串,并且每次操作都是常数时间。
创作类型:
原创

本文链接:老师在黑板上写了一个不超过 500 位的整数 n(1≤n<10500),要求同学们擦掉其中任意 k

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

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

分享考题
share