• 剑指 Offer 57. 和为s的两个数字(简单)


    通过率 66.3%

    题目链接

    题目描述:

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

    思路:

    遍历数组,设双指针,一个left从头开始,一个right从尾开始,利用数组递增的特性,若两指针指向的数之和小于target,则left++,大了就right--,直到找到和为target的(返回包含两指针对应的值的数组)或者两指针相遇(返回空数组)

     1 /*JavaScript*/
     2 /**
     3  * @param {number[]} nums
     4  * @param {number} target
     5  * @return {number[]}
     6  */
     7 var twoSum = function(nums, target) {
     8     let left = 0, right = nums.length - 1
     9     while(left < right) {
    10         const ans = nums[left] + nums[right]
    11         if(ans < target) {
    12             left++
    13         } else if(ans > target) {
    14             right--
    15         } else {
    16             return [nums[left], nums[right]]
    17         }
    18     }
    19     return []
    20 };

    官网有些题解说可以用二分或者哈希,有兴趣自行去了解吧~

  • 相关阅读:
    设置与获取Cookie
    事件对象详解
    兼容各浏览器的鼠标滚轮事件
    正则对象与正则表达式的基础学习
    Ajax 学习
    禅道使用流程概述
    Fiddler、Maven介绍
    Locust安装教程与使用
    常用工具软件包下载地址
    SVN合并步骤
  • 原文地址:https://www.cnblogs.com/wwqzbl/p/15204917.html
Copyright © 2020-2023  润新知