美文网首页
15.和为S的两个数字

15.和为S的两个数字

作者: percykuang | 来源:发表于2019-10-20 14:10 被阅读0次

    题目

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

    最容易想到的思路是,两层遍历,暴力求解。另一种思路是利用首尾指针逐次往中间逼近,知道找到第一个满足条件的S,其实这个S也就是那个乘积最小的S,用数学可以证明,排序队列里,越靠近中间的两个数的乘积越大。

    代码

    function FindNumbersWithSum(arr, sum) {
      if (arr.length === 1)  return []
    
      let res = []
      let start = 0
      let end = arr.length - 1
    
      while (start < end) {
        if (arr[start] + arr[end] > sum) {
          end--
        } else if (arr[start] + arr[end] < sum) {
          start++
        } else {
          res.push([arr[start], arr[end]])
          return res
        }
      }
      return res
    }
    

    相关文章

      网友评论

          本文标题:15.和为S的两个数字

          本文链接:https://www.haomeiwen.com/subject/ektamctx.html