【问题标题】:Interview - find all pairs of array elements whose sum is known面试 - 找到总和已知的所有数组元素对
【发布时间】:2013-11-23 07:01:53
【问题描述】:

有人问我这个问题: 给定大小为n 的ints 和int sum 的数组,我需要返回总和等于sum 的所有数组元素对

std::vector< std::pair<int,int> > find(int* arr,size_t n,int sum)

数组未排序。 我提出了一个使用哈希表的 O(n) 时间解决方案:

traverse the arr 
  if arr[i] is in the hash 
       vector.push_back (make_pair(arr[i],sum-arr[i]));
  else
       insert to the hash sum - arr[i]

该解决方案需要额外的空间用于散列......应该为散列选择什么大小?哪个哈希函数?

你怎么看?有没有更好的方法来解决这个问题?

附: 我知道存在一个额外的解决方案:对数组进行排序;根据当前总和是否大于或小于sum

更新。 存在的答案不是同一个问题 - 我对哈希的正确实现感兴趣。

【问题讨论】:

  • 是的,您几乎总结了解决问题的两种方法。我不确定除此之外还有很多话要说。 (哦,它叫做 2SUM)。
  • 首先,对数组进行排序,然后找到求和的对。
  • @SChepurin OP 知道这个解决方案。他对哈希的实现很感兴趣。
  • 任务是“...返回数组元素的所有对”,但您插入make_pair(arr[i],sum-arr[i]),其中sum-arr[i] 不是给定数组的元素
  • @borisbn - 它是。阅读我如何填充嘘声的方式

标签: c++ arrays algorithm


【解决方案1】:

你可以使用 unordered_set,它可以在 O(1) 中找到一个元素

【讨论】:

    猜你喜欢
    • 2020-02-22
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多