通过率 66.3%
题目描述:
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]
示例 2:
输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]
限制:
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^6
思路:
遍历数组,设双指针,一个left从头开始,一个right从尾开始,利用数组递增的特性,若两指针指向的数之和小于target,则left++,大了就right--,直到找到和为target的(返回包含两指针对应的值的数组)或者两指针相遇(返回空数组)
1 /*JavaScript*/ 2 /** 3 * @param {number[]} nums 4 * @param {number} target 5 * @return {number[]} 6 */ 7 var twoSum = function(nums, target) { 8 let left = 0, right = nums.length - 1 9 while(left < right) { 10 const ans = nums[left] + nums[right] 11 if(ans < target) { 12 left++ 13 } else if(ans > target) { 14 right-- 15 } else { 16 return [nums[left], nums[right]] 17 } 18 } 19 return [] 20 };
官网有些题解说可以用二分或者哈希,有兴趣自行去了解吧~