第四章实践

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

原文地址:https://www.cnblogs.com/wwency/p/10051829.html

时间: 2024-10-07 16:47:02

第四章实践的相关文章

算法第四章实践报告

1.选择第二题进行分析. 给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数.对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案. 输入 178543 4 输出132.问题描述:就是删掉指定数字中的一些数字,然后重新组成一个新的数使得这个数达到最小.3.算法描述:这个问题第一眼看下去容易想到对数组不停的排序然后不断删掉最大的,但是按着这个思路去做却发现,不断提取整型数组然后排序会比较复杂,因为要不断求余数等等,而且代码不

算法 第四章实践

1.实践题目 程序存储问题 2.问题描述 设有n 个程序{1,2,-, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是 li,1≤i≤n. 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序. 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数. 3.算法描述 for(int i=0;i<n;i++) cin>>a[i];//将程序的长度存放在数组之中 sort(a,a+n);//将数组中的元素排序 int num=

算法的第四章实践报告

分析程序存储问题.内容包括:   1. 实践题目 设有n 个程序要存放在长度为L的磁带上.各个程序存放在磁带上的长度已列出. 程序存储问题要求确定使得n  个程序能够在磁带上存储尽可能多的程序的一个存储方案.       2.问题描述 要求每次选择长度最小的程序放入磁带中,使得能放入的程序量最多       3.算法描述(说明你的贪心策略,并且参考会场安排问题,利用反证法证明贪心选择和最优子结构性质) 每次选择剩下的程序中长度最小的程序,如会场安排问题,按小集合排在前来遍历,也即是“贪心策略”.

第四章实践报告

7-1最优合并问题 1.问题描述: 给定k 个排好序的序列, 用 2 路合并算法将这k 个序列合并成一个序列. 假设所采用的 2 路合并算法合并 2 个长度分别为m和n的序列需要m+n-1 次比较.试设 计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少. 为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多. 输入格式:第一行有 1 个正整数k,表示有 k个待合并序列. 第二行有 k个正整数,表示 k个待合并序列的长度. 输出格式:输出最多比较次数和最少比较

第五部分 架构篇 第十四章 MongoDB Replica Sets 架构(自动故障转移/读写分离实践)

说明:该篇内容部分来自红丸编写的MongoDB实战文章. 1.简介 MongoDB支持在多个机器中通过异步复制达到故障转移和实现冗余,多机器中同一时刻只有一台是用于写操作,正是由于这个情况,为了MongoDB提供了数据一致性的保障,担当primary角色的服务能把读操作分发给Slave(详情请看前两篇关于Replica Set成员组成和理解). MongoDB高可用分为两种: Master-Slave主从复制:只需要在某一个服务启动时加上-master参数,而另外一个服务加上-slave与-so

Python编程从入门到实践(第三、四章的列表和元祖) &#142015;

原文: http://blog.gqylpy.com/gqy/414 置顶:来自一名75后老程序员的武林秘籍--必读(博主推荐) 来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我

贪心算法?我全都要!——算法第四章上机实践报告

算法第四章上机实践报告 一.        实践题目 4-1 程序存储问题 (90 分) 设有n 个程序{1,2,…, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是 li,1≤i≤n. 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序. 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数. 输入格式: 第一行是2 个正整数,分别表示文件个数n和磁带的长度L.接下来的1行中,有n个正整数,表示程序存放在磁带上的长度. 输出

阅读《软件工程—理论方法与实践》第四章心得体会

阅读第四章所得体会.软件需求是决定软件开发是否成功的一个关键因素.开发人员应当学会正确地理解软件需求,实行开非完善但是高质量的需求开发和管理,最大限度地降低软件需求风险.软件需求可以划分为业务需求(定义了项目的远景和范围).用户需求(使用该系统需要完成的任务).系统需求.功能需求(说明了需要开发实现的功能)和非功能需求(功能需求的补充)等型.需求工程是应用已证实有效的原理和方法,并通过合适的工具和符号,系统地描述出待开发系统及其行为特征和相关约束,其过程包括需求获取.需求分析.需求规格说明.需求

软件工程——理论、方法与实践 第四章

第四章  开头讲明软件需求是决定软件开发是否成功的一个关键因素:点明其重要性.软件需求划分为业务需求.用户需求.功能需求和非功能需求.系统需求,各种需求都对软件设计过程极为重要.需求工程过程包括需求获取.需求分析.需求规格说明.需求验证以及需求管理,其中需求获取是在问题及其最终解决方案之间架设桥梁的第一步,其获取方法有:面谈.需求专题讨论会.观察用户工作流程.原型化方法.基于用例方法.需求验证要确定正确性.无二义性.完整性.可验证性.一致性.可修改性以及可跟踪性.需求管理的任务是分析变更影响并控