首页 > 其他 > 详细

第四章上机实践报告

时间:2019-11-16 18:54:47      阅读:95      评论:0      收藏:0      [点我收藏+]

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方法,大大简洁了代码长度。

第四章上机实践报告

原文:https://www.cnblogs.com/lisihao/p/11872731.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!