如何实现连续数值对最大值减1且保持其余数值不变
处理方案
核心逻辑很简单:遍历向量时用集合记录所有已经遍历过的原始数值,当前数值如果在集合中存在比它小1的数,就将它减1后存入结果;如果不存在就直接存原数值,同时把当前原始数值加入集合即可。
按这个逻辑处理你给出的样例,完全匹配预期结果:
- 初始集合为空,第一个数1,集合里没有0,直接保留1,把1加入集合
- 第二个数2,集合里有1,减为1存入,把2加入集合
- 第三个数19,集合里没有18,保留19,加入集合
- 后续的5、7都找不到对应小1的前置值,直接保留,依次加入集合
- 第六个数2,集合里已经有1,减为1存入
- 第七个数20,集合里有19,减为19存入,把20加入集合
- 56、89找不到对应小1的前置值,直接保留
- 第十个数20,集合里有19,减为19存入
- 103、76找不到对应小1的前置值,直接保留,103加入集合
- 最后一个数104,集合里有103,减为103存入
Python 实现代码
处理数值列表的版本:
arr = [1, 2, 19, 5, 7, 2, 20, 56, 89, 20, 103, 76, 104] seen = set() result = [] for num in arr: if num - 1 in seen: result.append(num - 1) else: result.append(num) seen.add(num) print(result) # 输出: [1, 1, 19, 5, 7, 1, 19, 56, 89, 19, 103, 76, 103]
如果输入是空格分隔的字符串,可以直接用下面的版本直接输出字符串结果:
input_str = "1 2 19 5 7 2 20 56 89 20 103 76 104" num_list = list(map(int, input_str.split())) seen = set() output = [] for num in num_list: output.append(str(num - 1) if num - 1 in seen else str(num)) seen.add(num) print(' '.join(output)) # 输出: 1 1 19 5 7 1 19 56 89 19 103 76 103
内容的提问来源于stack exchange,提问作者Jeni
相关产品推荐
相关产品推荐

