You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现连续数值对最大值减1且保持其余数值不变

处理方案

核心逻辑很简单:遍历向量时用集合记录所有已经遍历过的原始数值,当前数值如果在集合中存在比它小1的数,就将它减1后存入结果;如果不存在就直接存原数值,同时把当前原始数值加入集合即可。
按这个逻辑处理你给出的样例,完全匹配预期结果:

  1. 初始集合为空,第一个数1,集合里没有0,直接保留1,把1加入集合
  2. 第二个数2,集合里有1,减为1存入,把2加入集合
  3. 第三个数19,集合里没有18,保留19,加入集合
  4. 后续的5、7都找不到对应小1的前置值,直接保留,依次加入集合
  5. 第六个数2,集合里已经有1,减为1存入
  6. 第七个数20,集合里有19,减为19存入,把20加入集合
  7. 56、89找不到对应小1的前置值,直接保留
  8. 第十个数20,集合里有19,减为19存入
  9. 103、76找不到对应小1的前置值,直接保留,103加入集合
  10. 最后一个数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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:09:24