剑指offer_57_和为s的两个数字I【javascript】

33 阅读1分钟

题目链接

leetcode.cn/problems/he…

题目【简单】

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