# 和为s的两个数字

# 一、题目

输入一个递增排序的数组和一个数字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

# 二、思路

1、暴力法

2、哈希表

3、双指针

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    if (nums.length < 2) return [];

    let left = 0;
    let right = nums.length - 1;
    let sum;
    while(left < right) {
        sum = nums[left] + nums[right];
        if (sum > target) {
            right--;
        } else if (sum < target) {
            left++;
        } else {
            return [nums[left], nums[right]];
        }
    }

    return [];
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

leetcode (opens new window)

上次更新: 1/5/2022, 9:25:14 AM