TypeScript算法每日一题:两数之和(167)

作者:前端小王hs

阿里云社区博客专家/清华大学出版社签约作者✍/CSDN百万访问博主/B站千粉前端up主

题库:力扣
题目序号:167(中等)
题目:
给你一个下标从1开始的整数数组 numbers ,该数组已按非递减顺序排列,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。

以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。

你可以假设每个输入只对应唯一的答案 ,而且你不可以重复使用相同的元素。

你所设计的解决方案必须只使用常量级的额外空间

示例 1:

输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

解题思路:
这里需要注意的几个条件是
①下标从1开始👉得到的结果要加1
②非递减顺序排列👉递增
③不可以重复使用相同元素👉下标不能一样
④必须只使用常量级的额外空间👉传入的是大小为n的数组,如果我们使用了大小为n或与n成正比的数组去存储计算的中间结果,那么就没有使用常量级

由于这是一个递增的数组,那么基础的解题思路是可以采用暴力枚举思路(点击跳转暴力枚举解法)
另外,还可以采用双向指针的思路,也就是从数组的第一项最后一项双向奔赴,那么需要注意的是,由于数组是非递减顺序排列的,所以如果得到的结果小于tagget,那么应该是左边的下标+1,反之则是右边下标-1,这也很好理解,例如示例1的数组[2,7,11,15],第一次是2+15=17,大于目标数9,那么右边的数就应该从15退到11,也就是right--

解题代码:

function twoSum(numbers: number[], target: number): [number, number] | null {  
    let left = 0;
    // 注意,由于数组从0开始,所以最后一项是length-1
    let right = numbers.length - 1; 
    while (left < right) {  
        const sum = numbers[left] + numbers[right];  
        // 判断结果,如果相等直接return
        if (sum === target) {  
            return [left + 1, right + 1];
        // 当和小于目标数时 
        } else if (sum < target) {  
            left++;
        // 当和大于目标数时
        } else {   
            right--;  
        }  
    }  
    return null;  
}  

解题过程示例:
示例1的数组[2,7,11,15],第一次是2+15=17,大于目标数9,那么右边的数就应该从15退到11,也就是right--,直至2+7=9,此时得到下标数组[0,1],然后下标都加1满足题意

相关推荐

  1. TypeScript算法每日之和(167

    2024-06-06 02:40:03       25 阅读
  2. 每日】YACS P817:归零

    2024-06-06 02:40:03       55 阅读
  3. 每日:LeetCode1.之和

    2024-06-06 02:40:03       45 阅读
  4. 每日 --- 之和[力扣][Go]

    2024-06-06 02:40:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 02:40:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 02:40:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 02:40:03       82 阅读
  4. Python语言-面向对象

    2024-06-06 02:40:03       91 阅读

热门阅读

  1. RCE漏洞简介

    2024-06-06 02:40:03       27 阅读
  2. 昵称生成器

    2024-06-06 02:40:03       28 阅读
  3. python之collections

    2024-06-06 02:40:03       25 阅读
  4. ASP.NET Core 增加后台定时托管任务

    2024-06-06 02:40:03       29 阅读
  5. 阿里云计算之Linux目录学习笔记(三)

    2024-06-06 02:40:03       19 阅读
  6. python多线程

    2024-06-06 02:40:03       41 阅读
  7. Redis一键巡检脚本

    2024-06-06 02:40:03       32 阅读