1.实践题目
删数问题
2.问题描述
给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案。
3.
while(count<k){ count++; int num=0; //17543 1543 143 13 for(int i=0;i<len-1;i++) { if(a[i]>a[i+1]) break; num++; } for(int i=num;i<len;i++) a[i]=a[i+1]; len--; } if(len==1) cout<<a; else{ int flag=1; for(int i=0;i<len;i++){ if(a[i]!='0'){ flag=0; } if(flag==0) cout<<a[i]; } if(a[len-1]=='0'&&flag==1) cout<<0; }
采用贪心的思想,从非递增处开始剔除,之后的往前移,然后就是对输出含0情况的判定与结果的输出。
4.算法时间及空间复杂度分析
时间复杂度主要剔除与重新排序处,while包for时间复杂度为O(n^2),空间复杂度为开的数组大小le+5.
5.心得体会
通过这道题,彻底感受到了贪心的魅力,思路清晰简单,算法也较为简单,做出题目也很是开心。更加感受到了小组合作的力量,因为大家思想的碰撞,才能解答出这道不简单的题目,所以在困难面前不要想着一个人蛮干。