博客
关于我
【剑指Offer 57】js和为S的两个数字
阅读量:656 次
发布时间:2019-03-15

本文共 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笔记 :

转载地址:http://hlqmz.baihongyu.com/

你可能感兴趣的文章
wxwidgets绘图
查看>>
wxwidgets事件处理
查看>>
用OpenCv转换原始图像数据到wximage
查看>>
codeblocks下wxWidgets编译与配置
查看>>
OpenCv+wxwidgets尝试
查看>>
wxwidgets自定义事件+调试
查看>>
wxwidgets编写多线程程序--wxThread
查看>>
BUUCTF:[湖南省赛2019]Findme
查看>>
ciscn2021西北部分pwn
查看>>
p144循环网络
查看>>
Finger.01 - ESP8266模块STA模式调试
查看>>
三维点云处理
查看>>
springboot security 基于redis的session共享(7)
查看>>
vue 权限管理 菜单按钮权限控制(7)
查看>>
vue 权限管理 主题切换(8)
查看>>
spring
查看>>
inno setup 一些技巧
查看>>
Qt SQLite database is locked Unable to fetch row
查看>>
Qt 在Excel文件中Chart绘图
查看>>
TCP 详解
查看>>