【剑指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]];
    }
  }
};

# 更多资料

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