【剑指Offer 57】js和为S的两个数字
发布日期:2021-05-18 10:46:56 浏览次数:12 分类:原创文章

本文共 741 字,大约阅读时间需要 2 分钟。

和为S的两个数字

题目

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

思路

数组中可能有多对符合条件的结果,而且要求输出乘积最小的,说明要分布在两侧 比如 3,8 5,7 要取3,8

看了题目了,很像leetcode的第一题【两数之和】,但是题目中有一个明显不同的条件就是数组是有序的,可以使用使用大小指针求解,不断逼近结果,最后取得最终值。

  • 设定一个小索引left,从0开始
  • 设定一个大索引right,从array.length开始
  • 判断array[left] + array[right]的值s是否符合条件
  • 符合条件 - 返回
  • 大于sumright向左移动
  • 小于sumleft向右移动
  • left=right,没有符合条件的结果

代码

function FindNumbersWithSum(array, sum) {     let left = 0;  let right = array.length - 1;  while (left < right) {       const s = array[left] + array[right];    if (s > sum) {         right--;    } else if (s < sum) {         left++;    } else {         return [array[left], array[right]]    }  }  return [];}

更多资料

整理不易,若对您有帮助,请给个「关注+点赞」,您的支持是我更新的动力 👇

📖数据结构专栏:
🐱Github笔记 :

上一篇:【剑指Offer 57 Ⅱ】js 和为S的人连续正整数序列
下一篇:【剑指Offer 21】js调整数组顺序使奇数位于偶数前面

发表评论

最新留言

不错!
[***.144.177.141]2025年05月08日 11时21分38秒