two-sum两数之和问题代码逻辑错误排查及正确实现求助
两数之和代码问题排查与实现
原代码逻辑错误
- 结果列表初始化位置错误:
l = []放在for循环内部,每次遍历新元素时都会清空之前的存储结果,最终仅能保留最后一次符合判断条件的单个下标 - 仅存储当前元素下标,未获取补数下标:判断
X-A[i]存在后,仅将当前下标i加入列表,没有记录补数对应的下标,无法返回成对的结果 - 未处理重复匹配与自身匹配问题:没有排除当前元素自身和自身匹配的场景,也没有避免同一个组合被重复识别的问题
正确实现
以下实现基于哈希表,时间复杂度O(n),可以直接返回符合条件的两个元素下标:
def find2Sum(A, X): # 哈希表存储已遍历的元素值与对应下标 num_index_map = {} for idx, num in enumerate(A): complement = X - num if complement in num_index_map: # 匹配到结果直接返回两个下标 return [num_index_map[complement], idx] # 未匹配到则将当前元素存入哈希表 num_index_map[num] = idx # 无匹配结果返回空列表 return [] nums = [1,4,6,44, 9,8] target = 14 print(find2Sum(nums, target))
运行上述代码输出结果为[2, 5],对应元素6和8,和为14,符合预期。
内容的提问来源于stack exchange,提问作者Pikaschu
相关产品推荐
相关产品推荐

