首页 > 解决方案 > Leetcode 二和:在列表中返回错误索引的问题

问题描述

我正在研究 Leetcode 的两个总和问题,您必须在其中找到加起来为目标的两个数字的索引。

在问题陈述中,给出了三个例子来检查:nums = [2,7,11,15]& target = 9(应该输出[0,1])、nums = [3,2,4]& target = 6(应该输出[1,2])和最后nums = [3,3]& target = 6(应该输出[0,1])。据说输出的顺序并不重要。链接到问题

我的代码在前两种情况下完美运行,但是对于nums = [3,3]&target = 6它返回[0, 0]而不是所需的[0,1]. 我认为错误是因为在我的代码中返回它找到nums.index(j)的第一个值的索引,而不是期望的.301

有没有办法解决这个问题而不必更改整个代码?(所以要在列表中重复的情况下获得正确的索引nums?)

先感谢您!

这是我的代码:

class Solution:
    def twoSum (output, nums, target):
        output = []
        for i in range(len(nums)):
            for j in nums[i+1:]:
                if nums[i]+j == target:
                    output.append(i)
                    output.append(nums.index(j))
        return output

标签: pythonlist

解决方案


一个问题是使用index. 这样做有两个问题:(1)它总是会在列表中找到值的第一个实例,如果列表包含重复项,这并不总是您想要的,以及(2)对于大型列表来说效率极低,因为当只需要两个循环时,它有效地创建了第三个内部循环。

另一个问题是无用的第一个参数output,它没有被使用,所以我删除了它。我也将其更改为在找到解决方案后立即返回。原始发布的代码只是不断搜索,这是不必要的(鉴于问题描述),即使它确实找到了其他解决方案,只是将索引附加到旧的索引似乎没有意义。

以下是您想要的:

def twoSum(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]
    return None

这是示例输出:

>>> twoSum([2, 7, 11, 15], 9)
[0, 1]
>>> 

>>> twoSum([3, 2, 4], 6)
[1, 2]
>>>

>>> twoSum([3, 3], 6)
[0, 1]
>>> 

推荐阅读