ydqbala

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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.心得体会

通过这道题,彻底感受到了贪心的魅力,思路清晰简单,算法也较为简单,做出题目也很是开心。更加感受到了小组合作的力量,因为大家思想的碰撞,才能解答出这道不简单的题目,所以在困难面前不要想着一个人蛮干。

posted on 2018-12-02 11:18  ydqbala  阅读(125)  评论(0编辑  收藏  举报