题目描述:输入一个递增排序的数组和一个数字 s,在数组中查找两个数,使得它们的和正好是 s。如果有多对数字的和等于 s,则输出任意一对即可。
示例:
输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]
nums[left]
与 nums[right]
的和等于 target,那么返回 nums[left]
和 nums[right]
nums[left]
与 nums[right]
的和大于 target,那么说明应该缩小和,所有 right 指针右移nums[left]
与 nums[right]
的和小于 target,那么说明应该扩大和,所有 left 指针左移其实整个过程就是两个指针,根据所指向的数的和的大小,来不断向中间移动查找的过程。
代码实现如下:
// ac地址:https://leetcode-cn.com/problems/he-wei-sde-liang-ge-shu-zi-lcof/
// 原文地址:https://xxoo521.com/2020-03-26-two-sum/
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let left = 0,
right = nums.length - 1;
while (left < right) {
if (nums[left] + nums[right] > target) {
--right;
} else if (nums[left] + nums[right] < target) {
++left;
} else {
return [nums[left], nums[right]];
}
}
};