Python:167 Leetcode Two SumII无效

时间:2017-08-25 14:59:19

标签: python

我试图解决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

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)]