我知道这个问题被问了很多次。但是,在StackOverflow上的所有相关帖子中挖掘之后,我仍然没有找到确定性的答案。你能帮忙吗?
我的问题是,对于这样的问题,是否存在O(log n)解决方案?为了使问题更加清楚,我们可以分别研究两种情况:案例(1)A没有重复和案例(2)A有重复的元素。
我听说基于二进制搜索的解决方案似乎能够实现O(log n),但不明白它是如何做的。这里n是A中元素的数量。
答案 0 :(得分:1)
假设元素i的每个位置的值都为2i,除了一个位置值为2i + 1的位置。
如果目标值是2n + 1,那么我们必须测试每对i和n-i,直到我们找到2i + 1的位置。
因此,在两种情况下都不可能比O(n)做得更好。
答案 1 :(得分:1)
忘记我之前说过的话。由于它是排序数组,我们可以在 O(N)中执行此操作。
K
,那就完成了。如果总和大于K
,则添加第一个& 倒数第二个。如果sum小于k
,请添加 second 和最后一个。答案 2 :(得分:0)
创建一个空的HashSet(O(ln n)查找)
遍历数组,对于每个数字n
,检查HashSet是否为K-n
。如果找到,则完成。如果未找到,则将n
添加到hashSet。 (迭代是O(N))
总O(N ln N)