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

LeetCode 167. Two Sum II - Input Array Is Sorted 题解

LeetCode 167. Two Sum II - Input Array Is Sorted 题解

题目描述

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

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

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

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

示例 1:

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

示例 2:

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

示例 3:

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

解题思路

方法:双指针

思路

  • 使用两个指针leftright,分别指向数组的起始位置和结束位置
  • 计算sum = numbers[left] + numbers[right]
  • 如果sum == target,返回[left+1, right+1](因为下标从 1 开始)
  • 如果sum < target,移动left指针向右
  • 如果sum > target,移动right指针向左
  • 直到找到答案

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组的长度。只需要遍历数组一次。
  • 空间复杂度:O(1),只需要常数级的额外空间。

代码实现

方法:双指针

class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: # 初始化双指针 left = 0 right = len(numbers) - 1 # 双指针遍历 while left < right: sum_val = numbers[left] + numbers[right] if sum_val == target: # 返回下标(从 1 开始) return [left + 1, right + 1] elif sum_val < target: # 移动左指针向右 left += 1 else: # 移动右指针向左 right -= 1 # 如果没有找到答案,返回空列表 return []

测试用例

测试用例 1:

输入:numbers = [2,7,11,15], target = 9
输出:[1,2]

测试用例 2:

输入:numbers = [2,3,4], target = 6
输出:[1,3]

测试用例 3:

输入:numbers = [-1,0], target = -1
输出:[1,2]

总结

本题是双指针的经典应用问题,主要考察对双指针技巧的理解和使用。通过使用双指针,我们可以高效地在有序数组中找到两个数,使得它们的和等于目标值。

双指针的核心思想是:使用两个指针分别指向数组的起始位置和结束位置,根据它们的和与目标值的关系移动指针,直到找到答案。

这种方法不仅适用于两数之和 II 问题,还可以应用于许多其他需要在有序数组中寻找元素的问题。掌握双指针的使用,对于解决这类问题非常重要。

http://www.jsqmd.com/news/646303/

相关文章:

  • 部分设计用例(了解),编写测试用例方法
  • 多模态鲁棒性不达标?立即启用这6种轻量级即插即用模块(附PyTorch 2.3兼容代码)
  • 成人智能体测仪市场剖析:2026 - 2032年复合年均增长率(CAGR)为6.0%
  • 告别手动调参!用AutoAugment自动搜索数据增强策略,让你的PyTorch模型精度再涨几个点
  • MWORKS.Sysplorer代码生成实战:永磁同步电机控制算法从模型到嵌入式部署
  • 不止于最短路径:Dijkstra那些被写进教科书却鲜为人知的概念(Stack、Semaphore、Deadlock)
  • 避开SpringSecurity多表登录的3个大坑:我的MyBatis-Plus整合血泪史
  • 智慧养老|基于springboot + vue智慧养老管理系统(源码+数据库+文档)
  • 代码分支管理规范
  • ESP-CSI:三步让普通路由器变身智能传感器的终极指南
  • 树莓派 4B 摄像头驱动优化与 Yocto 集成实战指南
  • JAVA-SSM学习6 MyBatisPlus-整合SpringBoot
  • Beyond Compare 5 永久激活终极指南:免费获取完整授权密钥的完整教程
  • LeetCode 217. Contains Duplicate 题解
  • 多模态大模型临床验证真相(仅限2024Q2最新NCCN/ESMO双指南采纳数据)
  • BGE Reranker-v2-m3开源大模型部署教程:基于FlagEmbedding的轻量级重排序服务搭建
  • 告别离群值困扰:手把手教你用FlatQuant为LLaMA-3-70B实现W4A4无损量化
  • 在Rocky Linux 10.1上,用智谱GLM-4.5-flash免费API驱动Strix进行自动化渗透测试
  • Redis 主从延迟检测与修复
  • 多模态大模型全链路优化黄金三角:数据层(多源异构清洗)、模型层(动态稀疏路由)、系统层(Unified Memory Pipeline)——20年AI基础设施专家闭门课
  • 从虚拟感知到物理交互:Sim-to-Real迁移中的状态表征对齐
  • 终极视频下载神器:一键保存国内7大主流平台在线视频的完整指南
  • 微信4.1.5.16 UI树“隐身”之谜:揭秘UIAutomation按需暴露机制与RPA破解之道
  • 树莓派+匿名飞控:不用遥控器,手把手教你搭建自主无人机的大脑与神经
  • 从AT24C02 EEPROM驱动看I2C控制器设计:Verilog状态机与双向端口处理的那些坑
  • 从OCV到CRPR:一次搞懂时序分析中“降额”与“悲观去除”的协同工作流
  • 紧急预警:多模态灰度中未监控的模态间延迟放大效应正在 silently 毁掉你的Recall@1——立即启用这4项关键SLI
  • 从Air724UG到ML307R:一个开源物联网项目的模组选型与硬件升级实战记录
  • PX4-V1.14开发笔记(4):VSCode插件配置与调试技巧
  • 电机控制:PWM 原理与应用