1

我被问到这个问题:给定一个大小nints 和的数组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]

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

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

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

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

4

1 回答 1

0

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

于 2013-11-13T07:26:26.433 回答