成对和的增加速度-Codewars

我大约在2周前才开始学习编码,并且遇到了以下问题。我最初将代码编写为双嵌套循环,但是毫无疑问地超时了。我重新编译了我的代码,以使最大时间为o(n)而不是o(n ^ 2),但这仍然太慢了。它在可视代码工作室上运行相当快(对于大小为10000000的列表,不到一秒钟),但似乎不足以解决该问题。任何有关从此处提高我的代码速度的建议都将受到极大的赞赏!此时迷路了。

def sum_pairs(ints, s):
minn = min(ints)
if s < 0:
    minn +- s
if minn > 0:
    minn = 0
maxx = max(ints)
if s > maxx:
    maxx = s
ans = [0] * 2
arr = [0.5] * (maxx-2*minn +1)
for i in range (0, len(ints), 1):
    target = s - ints[i]
    if target >= minn:
        if not arr[target-minn] == 0.5:
            ans[0] = target
            ans[1] = ints[i]
            return ans
    arr[ints[i]-minn] = i
return None  

由于某些原因,当我在此处输入c和P时,缩进不可用,请想象def函数(顶部)在其余代码的左侧。

问题

给定一个整数列表和一个总和值,请按出现的顺序返回前两个值(请从左边解析),这些值加起来就构成总和。

sum_pairs([11,3,7,5],10)

           ^--^      3 + 7 = 10

== [3,7]

sum_pairs([4,3,2,3,4],6)
       ^-----^         4 + 2 = 6, indices: 0, 2 *
          ^-----^      3 + 3 = 6, indices: 1, 3
             ^-----^   2 + 4 = 6, indices: 2, 4

*整个对较早,因此是正确的答案 == [4,2]

https://www.codewars.com/kata/54d81488b981293527000c8f/train/python