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

LeetCode 两数之和 思路 + 题解

好的,我们来详细分析LeetCode 两数之和(题目编号:1)的解题思路并提供代码实现。


问题描述

给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。假设每种输入只会对应一个答案,且数组中同一个元素不能使用两次。

示例

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

思路分析

1.暴力枚举法(不推荐)
  • 思路:遍历数组中每一个元素nums[i],对每个元素再遍历其后的元素nums[j],检查是否满足 $$ \text{nums}[i] + \text{nums}[j] = \text{target} $$。
  • 时间复杂度:$$ O(n^2) $$
  • 缺点:当数组较大时效率极低。
2.哈希表优化法(推荐)
  • 核心思路:利用哈希表存储值→索引的映射,实现 $$ O(1) $$ 的查找效率。
  • 步骤
    1. 创建一个空字典num_map(键为数值,值为索引)。
    2. 遍历数组,对于当前元素nums[i]
      • 计算互补数 $$ \text{complement} = \text{target} - \text{nums}[i] $$。
      • 检查complement是否在num_map中:
        • 若存在,则返回[num_map[complement], i]
        • 若不存在,则将nums[i]和索引i存入字典。
  • 时间复杂度:$$ O(n) $$
  • 空间复杂度:$$ O(n) $$(哈希表开销)

代码实现

Python 版本
def twoSum(nums, target): num_map = {} for i, num in enumerate(nums): complement = target - num if complement in num_map: return [num_map[complement], i] num_map[num] = i return [] # 题目保证有解,实际可省略
Go 版本
func twoSum(nums []int, target int) []int { numMap := make(map[int]int) for i, num := range nums { complement := target - num if idx, ok := numMap[complement]; ok { return []int{idx, i} } numMap[num] = i } return nil }

关键点总结

  1. 哈希表加速查找:通过空间换时间,将查找互补数的时间复杂度降至 $$ O(1) $$。
  2. 边遍历边存储:避免重复处理同一元素(如先存整个数组再查找会无法区分相同值)。
  3. 处理重复值:题目允许不同索引的相同值(如[3,3], target=6),但哈希表会覆盖旧索引,由于遍历顺序,新索引被存储时旧索引已参与过匹配,故不影响结果。

测试用例验证

  • 用例1nums = [2,7,11,15], target = 9→ 输出[0,1]
  • 用例2nums = [3,2,4], target = 6→ 输出[1,2]
  • 用例3nums = [3,3], target = 6→ 输出[0,1]

此解法高效且通用,是面试中的标准答案。

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

相关文章:

  • 如何高效使用openLCA:环境评估的完整实战指南
  • 快速原型:用快马AI十分钟构建智能应用控制解除工具Demo
  • Docker部署AnythingLLM踩坑记:解决SQLite数据库文件无法打开的权限问题
  • Clark 变换与反 Clark 变换
  • 实战即战力:基于快马为狼蛛f87pro快速生成游戏与专业软件键位方案
  • 保姆级教程:在Ubuntu 20.04上用Python+Bluez 5.50实现你的第一个BLE广播设备
  • 5倍提效:Picasso设计稿转代码全流程实战指南
  • 如何让Windows播放器支持所有视频格式:终极媒体解码解决方案
  • Spring循环依赖深度解析:从三级缓存原理到跨环境“灵异”现象
  • 银泰百货卡回收心得分享:如何避免回收陷阱? - 团团收购物卡回收
  • 09-ESP32-IDF日志系统实战:从配置到高级调试技巧
  • 黑丝空姐-造相Z-Turbo多模型对比:与Claude Code在创意编程上的协同
  • 从底层源码深入分析Bean的实例化
  • 快速原型设计:借助快马ai十分钟搭建python编程练习题验证系统
  • Pixel Language Portal 开发环境基石:Java与Python安装配置指南
  • JSXBIN高效解码工具:突破Adobe脚本加密的技术方案与实战指南
  • 聊聊2026年浙江拆除公司,拆除公司哪家便宜、业主口碑好推荐 - 工业推荐榜
  • ms-swift模型评测实战:100+评测数据集,一键评估模型效果
  • 累了,换地球号更新了
  • 东证期货联系方式查询:关于获取官方联系渠道与审慎使用期货服务的几点通用建议 - 十大品牌推荐
  • 如何用明日方舟游戏资源库轻松打造个性化游戏工具:完整实践指南
  • Qwen3-4B-Instruct-2507问题排查手册:部署失败、连接超时等常见错误解决方法
  • Windows 11硬件限制绕过终极指南:让旧电脑也能安装最新系统
  • 3个高效步骤:Label Studio数据标注从入门到精通
  • 细聊浙江室内拆除公司选购,靠谱的品牌有哪些 - myqiye
  • 东证期货联系方式查询:一份关于如何有效获取官方信息与理解其业务版图的实用指南 - 十大品牌推荐
  • 安全自定义暗黑2体验:d2s-editor的无门槛存档编辑方案
  • 3大实战场景解锁Dress Code高分辨率虚拟试衣数据集应用
  • 2026年GEO推广品牌机构费用揭秘,正微网络性价比怎么样 - mypinpai
  • DataX HDFS Reader实战:从配置解析到性能调优的完整指南