算法第四章上机实践报告
算法第四章上机实践报告
一、实践题目名称
删数问题
二、问题描述
给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最小的删数方案。如果数字最前面有0不输出。
输入格式:
第 1 行是1 个正整数 a。第 2 行是正整数k。
输出格式:
输出最小数。
三、算法描述
1、定义:定义一个字符串数组变量a【】,用于存储输入的正整数,以便一个一个遍历每一个数组,方便删除和查找。
2、运用贪心法
若要删除n个数字,则循环n次,每一次删除第一位比它后一位要大的数字,保证首位数不能大于后一位,这样才能输出最小的正整数。循环n次删除n位,每一次删除字符长度减一,用strlen()函数记录字符串长度。
代码如下:
3、题目要求若结果的首位有0,则不输出0,在输出上要做一个判断语句,如果首次输出有0,则直接跳至下一个数字,直到有非零的数字被输出后,则不用再跳过0。
代码如下:
四、算法时间及空间复杂度分析
此算法实现的时间复杂度为O(n^3) 空间复杂度都为n。
时间复杂度O(n^3):删除的for循环中有两个while循环,输出for循环时间复杂度为O(n)
空间复杂度O(n)。
五、心得体会
1、对于贪心算法,最主要是多次尝试不同方案,找出最贪心的方法以求得最优解。
2、贪心算法相对于前两种算法而言比较符合常规思想,每次都是同一种方案不断循环。
3、虽然贪心算法不一定保证是最优解,但其思路简单,算法省时好用。