两数之和 II - 输入有序数组
题目
给你一个升序排列的数组 nums 和一个整数 target, 数组中保证仅存在两个数的和为 target, 请你返回这两个数位置的数组, 且 pos1 < pos2.
示例
输入: nums = [2, 7, 11, 15], target = 9
输出: [1, 2]
题解
Tips
看到升序排列的数组, 先想到双指针.
-- 鲁迅
- 双指针, 一个指向开头, 一个指向结尾
- 如果双指针对应的数字之和大于 target, end 往前走
- 如果双指针对应的数字之和小于 target, start 往后走
- 找到后返回位置数组即可
/**
* @param {number[]} numbers
* @param {number} target
* @return {number[]}
*/
var twoSum = function (numbers, target) {
let i = 0,
j = numbers.length - 1
while (i <= j) {
const sum = numbers[i] + numbers[j]
if (sum > target) {
j--
} else if (sum < target) {
i++
} else {
return [i + 1, j + 1]
}
}
}