第四章上机实践报告

1.实践题目

4-2 删数问题 

2.问题描述

给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案。

3.算法描述

先从第一位开始往后看,若出现逆序的情况,删掉逆序的前面那位,再重新开始往后看;若看到最后一位没有删够k个或者不存在逆序,则从最后一位开始删,直到删到k个。

while(k>0)
    {
        for(int i=0;i<n;i++)
        {
            if(a[i+1]<a[i]||i==n-1)
            {
                a.erase(i,1);
                k--;
                break;
            }
        }
    }

4.算法时间及空间复杂度分析

时间复杂度:代码的主要算法部分有两层循环,循环的次数是k*n次,其中k表示要删除的位数,n表示整数a的位数,即时间复杂度为:O(kn)

空间复杂度:算法中定义了一个string型的数组,用来存储整数a的各个位数,即n位数,即空间复杂度为:O(n)

5.心得体会

起初做这道题,我是想定义一个函数来删除想要删除的数,但结果迟迟不对,于是我上网搜索string的有关删数方法,因而使用erase方法,大大简洁了代码长度。

posted @ 2019-11-16 17:56  luferm  阅读(93)  评论(0编辑  收藏  举报