【剑指offer】042-和为S的两个数字

题目

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

方法

方法:双指针问题
参考:https://www.cnblogs.com/wupeixuan/p/8680191.html
时间复杂度:n

思路

因为数组满足递增序列。所以使用两个指针,初始化left和right指向数组的首位
如果array[left] + array[right] == sum,那么这两个数就是最后答案。因为,两数之和相等,差值越小,两数乘积越大
如果total < sum,那么array[left]肯定不是结果数之一,left++
如果total > sum,那么array[right]肯定不是结果数之一,right–

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function FindNumbersWithSum(array, sum{
  // write code here
  let result = []
  let left = 0
  let right = array.length - 1
  while (left <= right) {
    let total = array[left] + array[right]
    if (total === sum) {
      result = [array[left], array[right]]
      break
    } else if (total > sum) right--
    else left++
  }
  return result
}
文章作者: ptp
文章链接: https://youyingjie114.github.io/2019/11/07/jz-offer/jz-offer-042/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 PTP'S BLOG