采访 - 查找总和已知的所有数组元素对

时间:2013-11-11 12:58:42

标签: c++ arrays algorithm

我被问到这个问题: 给定nintint sum的大小为sum的数组,我需要返回所有数组的元素,其总和等于std::vector< std::pair<int,int> > find(int* arr,size_t n,int sum)

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]

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

sum

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

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

P.S。 我知道存在另外一种解决方案:对数组进行排序;如果当前总和大于或小于{{1}}

,则根据结尾和开始的两个指针遍历它

UPD。 存在答案的问题不同 - 我对哈希的正确实现感兴趣。

1 个答案:

答案 0 :(得分:0)

你可以使用unordered_set,它可以在O(1)

中找到一个元素