【问题标题】:Python: 167 Leetcode Two SumII cannot workPython: 167 Leetcode 两个 SumII 不能工作
【发布时间】:2017-08-25 14:59:19
【问题描述】:

我尝试解决 Leetcode 问题 167 如下,但无法接受,我可以在 Pycharm 中成功运行,不知道是什么问题? 谢谢! 问题是:

给定一个已经按升序排序的整数数组,找到两个数字,使它们加起来等于一个特定的目标数字。

函数 twoSum 应该返回两个数字的索引,使得它们相加到目标,其中 index1 必须小于 index2。请注意,您返回的答案(index1 和 index2)不是从零开始的。

您可以假设每个输入都只有一个解决方案,并且您不能两次使用相同的元素。

输入:numbers={2, 7, 11, 15}, target=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

【问题讨论】:

  • 你忘了提到它的问题所在。 (另外,如果这是您的原始缩进,那么您可能想考虑修复它。)

标签: python


【解决方案1】:

您可能遇到了超时问题。通过测试每一数字,你的代码具有二次复杂度,但是一旦你有了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)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-12
    • 2020-06-30
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多