繁体   English   中英

我应该如何修改我的代码以便 twosum 函数工作?

[英]How should I modify my code so that twosum function works?

问题出在 Leetcode 中,它是:

给定一个整数数组 nums 和一个整数目标,返回两个数字的索引,使它们相加为目标。 每个输入将只有一个解决方案,并且您不能两次使用相同的元素。

这是我用于此练习的代码。

def twoSum(nums: List[int], target: int) -> List[int]:
    for i in range(len(nums)):
        for j in range(1,len(nums)):
            if nums[i]+nums[j]==target:
                return i,j
        return i,j
twoSum([8,3,7,9,2],9)
#Result: (0, 4)

输出不正确,因为8+2=10 ( nums[0] + nums[4] ) 不等于 9。

为什么会发生这种情况?

您的代码有两个问题:

  • 您的第二次return将在外循环的第一次迭代结束时返回。 由于 i 仍为 0 并且 j 一直到len(nums) - 1 ,因此结果为 (0, 4) 。 删除它应该可以解决这个问题。
  • 内部循环从 1 而不是 0 开始,但像 (1, 1) 这样的结果仍然是可能的。 因此,有必要根据外环的当前状态调整内环。

一个可能的解决方案如下所示:

def twoSum(nums: List[int], target: int) -> List[int]:
  for i in range(len(nums)):
    for j in range(i+1, len(nums)):
      if nums[i]+nums[j] == target:
        return i,j
  return -1, -1

-1, -1 只有在没有解决方案时才会出现。 由于问题中指出始终只有一个解决方案,因此永远不会发生这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM