【问题标题】:Two Sum Leetcode - Getting [0,0] on multiple lists input两个和 Leetcode - 在多个列表输入上获取 [0,0]
【发布时间】:2022-11-13 03:51:27
【问题描述】:

我是一个初学者,正在尝试解决两个和 leetcode(简单的问题)。 我知道我的代码是基本的,但是当我在另一个工作区(codecademy)中尝试它时它可以工作,如果 leet 代码输入只有 1 个列表,它也可以工作。

但是,当 leetcode 应用 2-3 个列表(站点上的测试用例)时,第 2 个和第 3 个列表返回 [0,0]。任何人都知道为什么它返回[0,0]? 我认为它与代码的第 2 行有关,该代码由 leetcode 一开始提供,与 Class solution: def twoSum(self, nums: List[int], target: int) -> List[int]: 相关,因为当我在 Codecademy 中提供不同的列表时,它可以工作。

我还尝试删除break,因为我认为这会阻止它获取多个输入,但它不能解决问题。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:

        lengthlist = len(nums)       
        a = 0
        b = 0
        
        for numbera in nums:
            for numberb in nums:
                if nums[a] + nums[b] == target:
                    if a < b:
                        return [a,b]
                        break
                    else:
                        return [b,a]
                        break
                else:
                    continue
                a += 1
            b += 1

编辑/结论: 发现基于 cmets 的代码存在问题。

leetcode 问题指定我不能两次使用同一个元素。 我没有考虑到这一点,因为我在两个 for 循环上都使用了 range(0, len(nums))。当我在第二个for 循环开始时复制 AboAmar 的回复时,我意识到我的代码只有在使用 i+1 时才有效。

第二个测试用例有 [3,2,4] 和 6 个目标。我的代码返回 [0,0] 因为 3+3 是 6。但是 leetcode 输出 [1,2] 因为我不能在列表中两次使用相同的元素。

【问题讨论】:

  • 那些中断是死代码,应该被删除。它们对您的程序没有任何影响。
  • 您使用 numberanumberb 作为变量进行迭代,但随后在内部使用 ab 代替。你的意思是做if numbera + numberb == target。那么a和b应该做什么呢?某种指数?如果需要索引,请使用 enumerate
  • “任何人都知道它为什么返回 [0,0]” - 99% 确定这是您代码中的错误。您的循环看起来很奇怪(例如,您没有使用numbera / numberb)。该列表的值是什么,使该代码返回[0, 0]
  • @SembeiNorimaki:不过,他们需要索引和值。比较值,但返回索引。 python的for in能做到吗?
  • @SergioTulentsev 是的,像这样使用枚举:for a, numbera in enumerate(nums)

标签: python list


【解决方案1】:

一个简单的循环,因为顺序并不重要,并且只假设一个解决方案。

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

如您所见,您需要索引和值。内部循环j 的索引从下一个i 到数组的末尾。因此,您不需要比较 a &lt; b 等。此外,也不需要 break,因为您在找到解决方案时已经 return

【讨论】:

  • 您的评论帮助我找到了我的代码的错误之处。谢谢。问题是:leetcode 问题表明我不能两次使用同一个元素。我没有考虑到这一点。我意识到我的代码只有在第二个for loop 开头使用 i+1 时才有效。第二个测试用例有 [3,2,4] 和 6 个目标。我的代码返回 [0,0] 因为 3+3 是 6。
【解决方案2】:
class Solution {
public int[] twoSum(int[] nums, int target) {
    int first=-1,second=-1;
    boolean flag=false;

    for(int i=0; i<nums.length; i++)
    {
        for(int j=0; j<nums.length; j++)
        {
            if(i!=j)
            {
                if(nums[i]+nums[j]==target)
                {
                    first=i;
                    second=j;
                    flag=true;
                }
            }
        }
        if(flag==true)
            break;
    }
    int[] arr= new int[2];
    arr[0]=first;
    arr[1]=second;

    return(arr);
}

}

【讨论】:

  • 由于您知道只有 2 个索引必须返回,因此您可以创建一个大小为 2 的数组,并将这两个索引分别分配给结果数组的每个索引。
猜你喜欢
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-16
  • 2012-02-07
  • 1970-01-01
  • 2021-12-15
  • 2018-07-02
相关资源
最近更新 更多