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

如何在3SUM问题中避免生成重复的三元组组合?

解决3Sum问题中的重复三元组问题

你的朴素解法思路是对的,先排序再三重循环查找,但因为数组里有重复元素,导致会输出重复的三元组。要解决这个问题,可以利用数组已排序的特性,在循环中跳过重复的元素,具体修改如下:

修改后的代码

nums = [-1, 0, 1, 2, -1, -4]
nums.sort()
result = []
for i in range(len(nums)):
    # 跳过和前一个i相同的元素,避免重复基准
    if i > 0 and nums[i] == nums[i-1]:
        continue
    for j in range(i+1, len(nums)):
        # 跳过和前一个j相同的元素(且j必须大于i+1,避免跳过i+1的第一个元素)
        if j > i+1 and nums[j] == nums[j-1]:
            continue
        for k in range(j+1, len(nums)):
            if nums[i] + nums[j] + nums[k] == 0:
                triplet = [nums[i], nums[j], nums[k]]
                result.append(triplet)
# 打印最终结果
for t in result:
    print(t)

关键改动说明

  • 用result列表统一存储结果,避免中途重复输出
  • 外层循环i:当i不是第一个元素,且当前元素和前一个元素相等时,跳过该循环,避免以相同的数作为第一个元素生成重复三元组
  • 中层循环j:当j不是i的下一个元素(即j > i+1),且当前元素和前一个元素相等时,跳过,避免在同一个i下生成重复的第二个元素组合
  • 因为数组已经排序,且跳过了i和j的重复,所以找到的三元组不会重复

运行这段代码后,输出就是你预期的:

[-1, -1, 2]
[-1, 0, 1]

内容的提问来源于stack exchange,提问作者Nin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:07:13