【发布时间】:2012-03-28 05:53:52
【问题描述】:
我们需要在一个数组中找到一对数,其和等于给定值。
A = {6,4,5,7,9,1,2}
总和 = 10 那么这对是 - {6,4} , {9,1}
我有两个解决方案。
- O(nlogn) 解决方案 - 使用 2 个迭代器(开始和结束)进行排序 + 校验和。
- O(n) 解决方案 - 散列数组。然后检查哈希表中是否存在
sum-hash[i]。
但是,问题在于,虽然第二种解决方案是 O(n) 时间,但也使用了 O(n) 空间。
所以,我想知道我们是否可以在 O(n) 时间和 O(1) 空间内完成。这不是家庭作业!
【问题讨论】:
-
数字需要连续???
-
我怀疑这种算法是否存在......
-
在这里说连续,我的意思是他们是否需要按照给定的顺序相互跟随???..在你的例子中..[6,4] 和 [9,1] 是在一个序列中.....4 是 6 的邻居,1 是 9 的邻居......
-
@TedHopp:如果您创建哈希集并检查同一迭代中是否存在元素,则可以轻松解决您描述的问题。 [而不是首先创建一个完整的哈希集,然后才检查一对]
-
我不认为它可以用 O(1) 空间 约束来完成。
标签: algorithm language-agnostic