我被问到这个问题:
给定n
个int
和int 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。 存在答案的问题不同 - 我对哈希的正确实现感兴趣。
答案 0 :(得分:0)
你可以使用unordered_set,它可以在O(1)
中找到一个元素