您可能想看一下这篇博客文章:
http://www.codingatwork.com/2011/07/array-
sum/
我的方法是对列表进行二进制搜索
K/2,然后
a向左移动一个变量,
b向右移动另一个变量,以寻找解决方案
a+b=K。
想法是
a从小于或等于的最大数
K/2开始
b,从大于的最小数开始
a。再次,使用二进制搜索来查找
a并
b成为数组中的下一个元素。然后
- 如果
a+b = K
是的话return (a,b)
。 - 如果为
a+b < K
,则移至b
右边的一个位置。 - 如果为
a+b > K
,则移至a
左侧一个位置。
当然,您可以跳过二进制搜索,而只是从
a数组的开头和数组
b的结尾开始,然后执行
- 如果
a+b = K
是的话return (a,b)
。 - 如果为
a+b < K
,则移至a
右边的一个位置。 - 如果为
a+b > K
,则移至b
左侧一个位置。
这可能更快。



