在排序数组中查找总和为 K 的一对整数
给定一个已排序的整数数组,我们如何找到一对总和为 K 的整数?
例如array = 1,3,5,6,10
,K = 6
,答案是1和5。
时间复杂度应该最小化。
Given a sorted array of integers, how can we find a pair of integers that sum to K?
e.g. array = 1,3,5,6,10
, K = 6
, the answer is 1 and 5.
Time complexity should be minimized.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可能想查看此博客文章:
http://www.codingatwork.com/ 2011/07/array-sum/
我的方法是对列表进行二分搜索来查找
K/2
,然后向左走一个变量a
并另一个变量b
正在尝试找到解决方案a+b=K
。这个想法是从小于或等于
K/2
的最大数字开始a
并从大于b
的最小数字开始。代码>a。再次使用二分查找查找a
并将b
设为数组中的下一个元素。然后a+b = K
,则返回(a,b)
。K
,然后将b
向右移动一位。a+b> K
,然后将a
向左移动一位。当然,您可以跳过二分查找,只在数组开头开始
a
,在数组末尾开始b
,然后执行a +b = K
,然后返回(a,b)
。K
,然后将a
向右移动一位。a+b> K
,然后将b
向左移动一位。这可能更快。
You may want to look at this blog post:
http://www.codingatwork.com/2011/07/array-sum/
My approach would be to do a binary search of the list for
K/2
, then walk one variablea
left and another variableb
right trying to find a solutiona+b=K
.The idea would be to start
a
at the largest number less than or equal toK/2
and startb
at the smallest number greater thana
. Again, use a binary search to finda
and letb
be the next element in the array. Thena+b = K
, thenreturn (a,b)
.a+b < K
, then moveb
to the right one position.a+b > K
, then movea
to the left one position.Of course, you can skip the binary search and just start
a
at the beginning of the array andb
at the end of the array, and then doa+b = K
, thenreturn (a,b)
.a+b < K
, then movea
to the right one position.a+b > K
, then moveb
to the left one position.This is probably faster.
存在线性 (O(n)) 解。
获取一个哈希表,并在遍历数组时检查当前元素是否已在哈希表中 - 如果是,那么您就找到了答案。否则插入等于 K 减去当前元素的数字。顺便说一句,适用于非排序数组。
There is a linear (O(n)) solution.
Take a hashtable and while iterating through the array check if the current element is already in the hashtable - if so then you've found the answer. Otherwise insert the number which is equal to K minus the current element. Works for non sorted array, btw.