非唯一元素的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问题的通用需求:
- 遍历逻辑错误:代码只检查当前元素和它下一个相邻元素的和是否等于目标值,这意味着它只能解决「相邻两数之和等于目标」的特殊场景,而不是Two Sum要求的「任意两个不同位置的数之和等于目标」
- 无法处理非相邻的符合条件元素:比如测试用例
[2,11,7,15]、目标9,正确结果是[0,2],但你的代码会直接忽略,因为2和7不相邻 - 重复元素场景完全失效:像
[3,2,3]、目标6的情况,两个3不相邻,你的代码根本不会检查到它们的和,所以返回空数组,完全不符合预期 - 代码健壮性差:当遍历到数组最后一个元素时,
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
相关产品推荐
相关产品推荐

