python - 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)
的第一个值的索引,而不是期望的.3
0
1
有没有办法解决这个问题而不必更改整个代码?(所以要在列表中重复的情况下获得正确的索引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
解决方案
一个问题是使用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]
>>>
推荐阅读
- xquery - 不使用 Group by 的替代 xquery
- matplotlib - 最大递归深度超过 ax.set_xlim() 和 ax.callbacks.connect('xlim_changed') 的组合
- regex - 从日志文件中提取一个字母(日志级别)
- python - 逐帧下载 MJPEG 流
- cordova - 贝宝交易 ID
- php - Laravel 5:登录密码与保存的密码不匹配
- python - 为什么我无法将列表传递给 textblob 中的 word_counts?
- git - 如何从存储库创建 .git 文件夹
- c# - 跳过 DbContext.Database.CreateIfNotExists() 上的某个表
- c++ - 使用 Keras 设置神经网络,然后使用 TF C++ API 对其进行训练