【剑指offer:和为s的两个数字】双指针

题目描述:输入一个递增排序的数组和一个数字 s,在数组中查找两个数,使得它们的和正好是 s。如果有多对数字的和等于 s,则输出任意一对即可。

示例

输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]

解法:双指针

  • 准备两个指针,left 指向数组开始,right 指向数组结尾
  • 如果 nums[left]nums[right] 的和等于 target,那么返回 nums[left]nums[right]
  • 如果 nums[left]nums[right] 的和大于 target,那么说明应该缩小和,所有 right 指针右移
  • 如果 nums[left]nums[right] 的和小于 target,那么说明应该扩大和,所有 left 指针左移

其实整个过程就是两个指针,根据所指向的数的和的大小,来不断向中间移动查找的过程。

代码实现如下:

// ac地址:https://leetcode-cn.com/problems/he-wei-sde-liang-ge-shu-zi-lcof/
// 原文地址:https://xxoo521.com/2020-03-26-two-sum/

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let left = 0,
        right = nums.length - 1;
    while (left < right) {
        if (nums[left] + nums[right] > target) {
            --right;
        } else if (nums[left] + nums[right] < target) {
            ++left;
        } else {
            return [nums[left], nums[right]];
        }
    }
};

更多资料

整理不易,若对您有帮助,请给个「关注+点赞」,您的支持是我更新的动力 👇

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×