给定:未排序A的整数数组 输入:整数k
A
k
输出:所有两个元素集,每个元素集之和等于kO(n)。
例:
A = {3,4,5,1,4,2}
输入:6 输出:{3,3}, {5,1}, {4,2}
{3,3}, {5,1}, {4,2}
注意:我知道一个O(n logn)解决方案,但这需要对数组进行排序。有什么方法可以解决O(n)中的问题。可以使用非平凡的C ++数据结构,即空间不受限制
制作一个常数时间查找表(哈希),以便可以查看数组(O(n))中是否包含特定的整数。然后,对于数组中的每个元素,查看是否k-A[i]包含。每个元素花费的时间是恒定的,因此总共需要O(n)时间。假设元素是不同的。使它与重复元素一起工作并不难。
k-A[i]