题目描述
代码
/**
* @param {number[]} numbers
* @param {number} target
* @return {number[]}
*/
var twoSum = function (numbers, target) {
const len = numbers.length
let p1 = 0
let p2 = len - 1
while (p1 < p2) {
const sum = numbers[p1] + numbers[p2]
if (sum === target) {
return [p1+1, p2+1]
} else if (sum < target) {
p1++
} else if (sum > target) {
p2--
}
}
};
解析
解法一:字典
解法二:双指针
- 1.左指针指向第一个元素,右指针指向最后一个元素,注意数组是升序排列的;
- 2.左右指针两数相加,如果两数之和小于目标元素,则左指针后移
- 3.如果两数之和大于目标元素,则右指针前移