剑指 Offer 57. 和为s的两个数字(简单)

通过率 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 };

官网有些题解说可以用二分或者哈希,有兴趣自行去了解吧~

 

posted @ 2021-08-30 10:50  自在逍遥处  阅读(28)  评论(0编辑  收藏  举报