题目链接
题目【简单】
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是 s。如果有多对数字的和等于s,则输出任意一对即可。
示例
示例 1:
输入:nums = [3, 9, 12, 15], target = 18
输出:[3,15] 或者 [15,3]
示例 2:
输入:nums = [8, 21, 27, 34, 52, 66], target = 61
输出:[27,34] 或者 [34,27]
提示:
- 1 <= nums.length <= 10^5
- 1 <= nums[i] <= 10^6
- 1 <= target <= 2*10^6
题解
双指针法
复杂度分析:
- 时间复杂度 O(N) : NNN 为数组 price 的长度;双指针共同线性遍历整个数组。
- 空间复杂度 O(1) : 变量 i, j使用常数大小的额外空间。
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let i = 0, j = nums.length - 1;
while( i < j) {
let num = nums[i] + nums[j];
if (num < target) {
i++;
} else if(num > target) {
j--;
} else {
return [nums[i], nums[j]]
}
}
return [];
};