我不确定该怎么做。给定一个数字列表和一个数字k,请返回列表中所有加起来为k的数字对。只能通过列表一次。
例如,给定[10,15,3,7]和k为17。程序应返回10 + 7。
您如何订购和退回每双鞋,而只需要浏览一次。
答案 0 :(得分:2)
使用一组记录来跟踪您所看到的内容。运行时O(N),空间:O(N)
def twoAddToK(nums, k):
seen = set()
N = len(nums)
for i in range(N):
if k - nums[i] in seen:
return True
seen.add(nums[i])
return False
答案 1 :(得分:0)
作为使用集合的Shawn代码的替代方法,还可以选择以O(N log N)时间对列表进行排序(如果允许覆盖原始输入,则可能没有多余的空间),然后应用an O(N) algorithm to solve the problem on a sorted list
尽管就时间而言,渐近复杂性稍微倾向于使用哈希集,但由于O(N)优于O(N log N),我敢打赌,排序+单遍查找在实践中要快得多。 / p>