原题链接:最小新整数
解题思路: 贪心(每次只考虑当前的前是否大于后,而不考虑后面是否还有更大数)
注意事项: 1.只有前>后才能删 2.每次删完都需要从头遍历 3.两重循坏全部遍历完若还没有达到目标位数直接pop到目标位数 4.若某次内层循坏遍历完没有执行删除则之后的循环都是在空转浪费时间,可以通过设置标志位跳出空转(优化方法,不考虑也行,不会超时)
参考代码:
def process(list,k): m = len(list) - k # 目标位数 cnt = 0 for _ in range(k): flag = 0 for i in range(len(list)-1): if list[i] > list[i+1]: list.remove(list[i]) cnt += 1 flag = 1 break if flag == 0: break if cnt < k: for _ in range(k-cnt): list.pop() for i in list: print(i,end='') print() t = int(input()) for _ in range(t): n,k = map(int,input().split()) n = str(n) list = [int(i) for i in n] process(list,k)
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复