排序数组中两个数字之和
题目
给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。
思路
跟力扣第一题两数之和基本一样,这里是升序排列
可以通过哈希表或者双指针解答
代码
1. 哈希表
/**
* @param {number[]} numbers
* @param {number} target
* @return {number[]}
*/
var twoSum = function (numbers, target) {
const map = {};
for (let i = 0; i < numbers.length; i++) {
if (map[target - numbers[i]] !== undefined) {
return [map[target - numbers[i]], i];
} else {
map[numbers[i]] = i;
}
}
};
2. 双指针法
/**
* @param {number[]} numbers
* @param {number} target
* @return {number[]}
*/
var twoSum = function (numbers, target) {
let i = 0;
let j = numbers.length - 1;
while (i < j) {
if (numbers[i] + numbers[j] === target) {
return [i, j];
} else if (numbers[i] + numbers[j] > target) {
j--;
} else {
i++;
}
}
};