删除重复数字后的最大数字
一个长整型数字,消除重复的数字后,得到最大的一个数字。
如12341,消除重复的1,可得到1234或2341,取最大值2341。
42234,消除4得到4223或者2234,再消除2,得到423或234,取最大值423。
输入
输入一个数字,范围[1,100000]
输出
输出经过删除操作后的最大值
示例一
输入
12341
输出
2341
示例二
输入
42234
输出
423
思路是将输入的数字字符串转化为数字列表,然后使用单调栈来找到最大的数。具体来说,首先使用计数排序统计每个数字出现的次数,然后遍历数字列表,对于每个数字,如果它比栈顶元素大,就将栈顶元素弹出,直到栈为空或者栈顶元素比当前数字大或者栈顶元素在后面不再出现。在这个过程中,需要使用一个vis数组来记录每个数字是否在栈中出现过,避免重复入栈。最后一步,将栈中的数字按照从高到低的顺序组合成一个新的数字,即为最大的数。
输入
n = input()
# 12341
print(n)
算法
def result():
cnt = [0] *10 # 数字都是0-9呀,所以。
s = []
vis = [0] * 10
# 统计字符出现的次数
for c in n:
cnt[int(c)] += 1
s.append(int(c)) # 转化为int型再添加进去。
st = [] # 定义栈
for i in range(len(s)):
cnt[s[i]] -= 1 #要对这个字符进行处理,所以先要减去1
if not st:
# 栈为空,那就要把他加进来