本文共 378 字,大约阅读时间需要 1 分钟。
给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。
a=str(input())
b=m=int(input()) sta=[] for i in a: while len(sta)!=0 and sta[-1]<i and m>0: m-=1 sta.pop() sta.append(i) print(''.join(sta[:len(a)-b]))因为想要最后剩下的数尽量大,所以贪心地从前往后找到某位数比后一位小就删掉这个数,但是这样需要 O(n*m) (n 是总位数,m 是删除的个数)。我们可以利用一个栈来达到 O(n)的时间复杂度:遍历每一位,当还能删除时且栈内的数比当前数小就出栈,直到栈内的数比当前数大,或者栈空,就将当前的数入栈。如果全部数都入过栈时还需要删除,那就从栈顶删。
转载地址:http://oftgn.baihongyu.com/