第四章实践

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上面提交后显示运行错误。感觉最后做出来很不容易,还有就是最优合并问题有点难。

posted @ 2018-12-01 23:59  wwency  阅读(139)  评论(0编辑  收藏  举报