【发布时间】:2020-02-22 12:07:09
【问题描述】:
我正在尝试解决以下 Codewars 问题:https://www.codewars.com/kata/sum-of-pairs/train/python
这是我目前在 Python 中的实现:
def sum_pairs(ints, s):
right = float("inf")
n = len(ints)
m = {}
dup = {}
for i, x in enumerate(ints):
if x not in m.keys():
m[x] = i # Track first index of x using hash map.
elif x in m.keys() and x not in dup.keys():
dup[x] = i
for x in m.keys():
if s - x in m.keys():
if x == s-x and x in dup.keys():
j = m[x]
k = dup[x]
else:
j = m[x]
k = m[s-x]
comp = max(j,k)
if comp < right and j!= k:
right = comp
if right > n:
return None
return [s - ints[right],ints[right]]
代码似乎产生了正确的结果,但是输入可以由最多包含 10 000 000 个元素的数组组成,因此对于大输入,执行超时。我需要帮助优化/修改代码,以便它可以处理足够大的数组。
【问题讨论】:
-
我是否遗漏了什么您在第 11 行有语法错误吗?我认为应该改为
elif x in m.keys() and x not in dup.keys()。 -
@Pame 回答了你的问题
标签: python optimization memoization