当前位置: 首页 > news >正文

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-1let right = numbers.length - 1; while (left < right) {  const sum = numbers[left] + numbers[right];  // 判断结果,如果相等直接returnif (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满足题意

http://www.lryc.cn/news/360422.html

相关文章:

  • 用docker搭建的Vulfocus镜像管理界面没有镜像可以拉取解决办法
  • CSPM.pdf
  • 多个短视频剪辑成一个视频:四川京之华锦信息技术公司
  • 算法第三天力扣第69题:X的平方根
  • 异常处理。
  • MySQL—函数(介绍)—字符串函数(基础)
  • CTF本地靶场搭建——静态flag题型的创建
  • 基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五)
  • 开源VS闭源:大模型发展路径之争,你站哪一派?
  • Python | Leetcode Python题解之第115题不同的子序列
  • STM32高级控制定时器应用之检测输入PWM周期和占空比
  • [AI Google] 三种新方法利用 Gemini 提高 Google Workspace 的生产力
  • 【U-Net验证】逐元素乘积将特征投射到极高维隐式特征空间的能力
  • 快团团大团长帮卖如何导出单个团购的订单?免费教程教你怎么做!
  • services层和controller层
  • Pycharm编辑器下自定义模块导入报错:no module named问题
  • C#使用GDI对一个矩形进行任意角度旋转
  • 打印机的ip不同且连不上
  • 关于linux程序的查看、前台运行、后台运行、杀死的管理操作。
  • STM32作业设计
  • PHPSTOM配置Laradock,xdebug,phpunit
  • 使用Java进行数据分析和处理:应用在实际业务场景中的技术
  • C++中的List
  • go map 如何比较两个 map 相等
  • 牛客网刷题 | BC108 反斜线形图案
  • 数据的表示和运算
  • 【爬虫工具】油管视频批量采集软件
  • 【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
  • 使用python绘制小提琴图
  • 【C++】6-7 你好,输出的格式控制(三角形)