解题思路: 贪心(每次只考虑当前的前是否大于后,而不考虑后面是否还有更大数)
注意事项: 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二级辅导-统计字符 (C语言代码)浏览:502 |
C语言训练-字符串正反连接 (C语言代码)浏览:618 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:520 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:1027 |
C语言训练-计算1977!* (C++代码)浏览:847 |
A+B for Input-Output Practice (VI) (C++代码)浏览:413 |
printf基础练习2 (C语言代码)浏览:941 |
众数问题 (C语言代码)浏览:821 |
Wu-求圆的面积 (C++代码)浏览:1883 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:603 |