前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【剑指offer:和为s的两个数字】双指针

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

作者头像
心谭博客
发布2020-04-21 15:42:44
3290
发布2020-04-21 15:42:44
举报
文章被收录于专栏:YuanXin

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

示例

代码语言:javascript
复制
输入: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 指针左移

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

代码实现如下:

代码语言:javascript
复制
// 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]];
        }
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解法:双指针
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档