我试图解决Leetcode问题167,如下所示,但它无法被接受,我可以在Pycharm中成功运行它,我想知道是什么问题? 谢谢! 问题是:
给定已按升序排序的整数数组,找到两个数字,使它们相加到特定目标数。
函数twoSum应返回两个数字的索引,以便它们相加到目标,其中index1必须小于index2。请注意,您返回的答案(index1和index2)不是从零开始的。
您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素。
输入:数字= {2,7,11,15},目标= 9输出:index1 = 1,index2 = 2
我的代码是:
class Solution(object):
def twoSum(self, numbers, target):
for x in range(0,len(numbers)):
for y in range(x+1,len(numbers)):
if numbers[x]+numbers[y] == target:
return x+1,y+1
return x+1,y+1
答案 0 :(得分:0)
您可能遇到超时问题。通过测试每个对数字,您的代码具有二次复杂度,但是一旦您拥有numbers[x]
,您知道 numbers[y]
应该是什么,即target - numbers[x]
,所以您只需要检查该号码是否在列表中。要快速完成此操作,最好将列表转换为字典,将数字映射到列表中的继承索引。
numbers = [2, 7, 11, 15]
target = 9
d = {e: i for i, e in enumerate(numbers, 1)}
res = [(i, d[target-e]) for i, e in enumerate(numbers, 1)
if target-e in d and d[target-e] > i]
print(res) # [(1, 2)]