题目描述
给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。
解题思路
与两数之和第一版题目相比,本题给定的是一个已经按照升序排列的有序数组,对于有序数组来说,可以使用双指针来解决此题:定义一个左指针从数组起始位置开始遍历数组,定义一个右指针从数组末尾位置开始遍历数组,如果左右指针所指向的数值之和大于目标数,说明右指针在结果正确时的指针右边(因为升序数组),此时将右指针向左移动,反之则移动左指针。
实现代码(js)
/**
* @param {number[]} numbers
* @param {number} target
* @return {number[]}
*/
var twoSum = function (numbers, target) {
// 定义左指针l 右指针r
let l = 0, r = numbers.length - 1;
// 要求返回值l小于r
while (l < r) {
if (numbers[l] + numbers[r] == target) {
// 如果相等则跳出循环
return [++l, ++r]
} else {
// 如果和大于target则移动右指针,反之移动左指针
numbers[l] + numbers[r] > target ? r-- : l++;
}
}
};