哪些数字加起来等于k?

时间:2019-04-02 00:23:12

标签: algorithm sorting sum

我不确定该怎么做。给定一个数字列表和一个数字k,请返回列表中所有加起来为k的数字对。只能通过列表一次。

例如,给定[10,15,3,7]和k为17。程序应返回10 + 7。

您如何订购和退回每双鞋,而只需要浏览一次。

2 个答案:

答案 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>