在排序数组中找到一对整数,其总和为K.

aks*_*hay 4 algorithm array-algorithms

给定一个排序的整数数组,我们怎样才能找到一对总和为K的整数?

例如array = 1,3,5,6,0,K = 6答案是1和5.

应尽量减少时间复杂性.

Pen*_*One 8

你可能想看看这篇博文:

http://www.codingatwork.com/2011/07/array-sum/

我的方法是对列表进行二进制搜索K/2,然后a向左走一个变量,b向右走另一个变量,试图找到解决方案a+b=K.

我们的想法是a从小于或等于的最大数字K/2开始b,从最小的数字开始a.再次,使用二进制搜索来查找ab成为数组中的下一个元素.然后

  • 如果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向左移动一个位置.

这可能更快.