给定一个排序的整数数组,我们如何找到一对总和为K的整数?
例如array = 1,3,5,6,10,K = 6答案为1和5。
array = 1,3,5,6,10
K = 6
时间复杂度应降至最低。
您可能想看一下这篇博客文章:
http://www.codingatwork.com/2011/07/array- sum/
我的方法是对列表进行二进制搜索K/2,然后a向左移动一个变量,b向右移动另一个变量,以寻找解决方案a+b=K。
K/2
a
b
a+b=K
想法是a从小于或等于的最大数K/2开始b,从大于的最小数开始a。再次,使用二进制搜索来查找a并b成为数组中的下一个元素。然后
a+b = K
return (a,b)
a+b < K
a+b > K
当然,您可以跳过二进制搜索,而只是从a数组的开头和数组b的结尾开始,然后执行
这可能更快。