剑指 Offer 57. 和为s的两个数字
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回两个数的乘积最小的,如果无法找出这样的数字,返回一个空数组即可。
示例 1:
输入:nums = [2,7,11,15], target = 9 输出:[2,7]
解法:双指针
- 数组已经从小到大排好
- 和相同, 乘积最小,乘数之一肯定最小
- 使用双指针,一个指针指向元素较小的值,一个指针指向元素较大的值。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。
- 如果两个指针指向元素的和 sum == target,那么这两个元素即为所求。
- 如果 sum > target,移动较大的元素,使 sum变小一些;
- 如果 sum < target,移动较小的元素,使 sum 变大一些。
var twoSum = function