1.实践题目
删数问题
2.问题描述
给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案。
输入格式:
第 1 行是1 个正整数 a。第 2 行是正整数k。
输出格式:
输出最小数。
输入样例:
在这里给出一组输入。例如:
178543
4
输出样例:
在这里给出相应的输出。例如:
13
3.算法描述
对输入的字符数组从第一个字符进行遍历,当小的数在前的时候,继续向后遍历;当大的数在前的时候,将该数删除,也就是把后面的数依次向前挪一个把该数覆盖,直到被覆盖数的个数等于要删除数的个数。如果被覆盖数的个数小于要删除数的个数的时候就已经遍历完成,此时字符数组是升序,保留前面的数即可。在新生成的字符数组中,如果所有的数为0,输出0;如果首位的几个数也为0,就从不是0的开始输出。
4.算法时间及空间复杂度分析(要有分析过程)
空间复杂度为O(1),就是一个字符数组的长度。
时间复杂度为O(n2),因为while循环内还有一个移动字符的for循环。
5.心得体会(对本次实践收获及疑惑进行总结)
删数问题最开始用的string里面的eraser一直出错,因为字符串的长度会从被擦掉字符那里断掉,很困惑。后来换成了字符数组的方式,运行正确但是由于数组定义的大小太小,导致pintia上面提交后显示运行错误。感觉最后做出来很不容易,还有就是最优合并问题有点难。
原文地址:https://www.cnblogs.com/wwency/p/10051829.html
时间: 2024-10-07 16:47:02