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

非唯一元素的Two Sum问题求解及现有实现方案评估

Two Sum问题:重复元素处理方案与现有代码评估

一、可行的解决逻辑

要处理包含重复元素的Two Sum问题,最通用且高效的方式是用**哈希表(Map/普通对象)**记录已遍历元素的索引,核心逻辑如下:

  • 遍历数组时,对每个元素ele,计算需要的补数:complement = target - ele
  • 检查哈希表中是否存在这个补数:
    • 如果存在,直接返回哈希表中补数对应的索引,加上当前元素的索引,这就是符合条件的两个数的位置
    • 如果不存在,把当前元素ele和它的索引存入哈希表,继续遍历下一个元素
  • 这种方法能自然处理重复元素:比如数组[3,2,3]、目标6,遍历到第三个元素3时,补数是3,此时哈希表中已经存了第一个3的索引0,直接返回[0,2]即可,不会出现重复使用同一元素的问题
  • 时间复杂度O(n),空间复杂度O(n),是最优的解法之一

二、对当前实现方案的评估

你的代码逻辑存在根本性问题,完全不符合Two Sum问题的通用需求:

  1. 遍历逻辑错误:代码只检查当前元素和它下一个相邻元素的和是否等于目标值,这意味着它只能解决「相邻两数之和等于目标」的特殊场景,而不是Two Sum要求的「任意两个不同位置的数之和等于目标」
  2. 无法处理非相邻的符合条件元素:比如测试用例[2,11,7,15]、目标9,正确结果是[0,2],但你的代码会直接忽略,因为2和7不相邻
  3. 重复元素场景完全失效:像[3,2,3]、目标6的情况,两个3不相邻,你的代码根本不会检查到它们的和,所以返回空数组,完全不符合预期
  4. 代码健壮性差:当遍历到数组最后一个元素时,nums.at(index + 1)会返回undefined,此时ele + undefined等于NaN,永远不会等于目标值,虽然不会报错,但属于冗余逻辑

你的代码运行结果验证

对于nums = [2,7,11,15]、目标9,因为2和7相邻,所以能返回[0,1],这只是碰巧符合场景;但对于nums1 = [3,2,3]、目标6,代码返回空数组,完全错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:45:00