一尘不染

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

algorithm

给定一个排序的整数数组,我们如何找到一对总和为K的整数?

例如array = 1,3,5,6,10K = 6答案为1和5。

时间复杂度应降至最低。


阅读 192

收藏
2020-07-28

共1个答案

一尘不染

您可能想看一下这篇博客文章:

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左侧一个位置。

这可能更快。

2020-07-28