LeetCode两数之和(Two Sum)算法无输出问题排查求助
Two Sum 代码无输出问题排查
问题根因
你的代码存在核心逻辑错误:存入字典的键不符合哈希表解法的设计要求。你当前存储的是当前元素的补数complement作为键,而正确逻辑应该存储**已经遍历过的元素值nums[i]**作为键,对应值为该元素的下标。
同时额外注意:不要用dict作为变量名,会覆盖Python内置的字典类关键字,可能引发未知异常。
错误复现(对应你给出的测试用例)
测试用例输入:nums = [3,2,4], target = 6
遍历执行过程如下:
- 第1轮(i=0,nums[i]=3):计算补数为3,字典为空,将
{3:0}存入字典 - 第2轮(i=1,nums[i]=2):计算补数为4,字典中无4键,将
{4:1}存入字典 - 第3轮(i=2,nums[i]=4):计算补数为2,字典中现有键为3、4,无2键,将
{2:2}存入字典
遍历结束后无匹配结果,函数无返回值,因此输出空。
修复方案
将存入字典的键改为当前遍历的元素值nums[i]即可,修复后的代码如下:
def twoSum(self, nums: List[int], target: int) -> List[int]: num_dict = {} for i in range(len(nums)): complement = target - nums[i] if complement in num_dict: return [num_dict[complement], i] # 存储已遍历的元素值和对应下标 num_dict[nums[i]] = i
修复后验证流程
- 第1轮(i=0,nums[i]=3):补数为3,字典为空,将
{3:0}存入字典 - 第2轮(i=1,nums[i]=2):补数为4,字典中无4键,将
{2:1}存入字典 - 第3轮(i=2,nums[i]=4):补数为2,字典中存在键2,对应值为1,返回
[1,2],符合正确输出要求。
内容的提问来源于stack exchange,提问作者Czaru
相关产品推荐
相关产品推荐

