音乐
音乐
暂未播放
0:00/0:00
暂无歌词
LeetCode | 两数之和
505 字
3 分钟
LeetCode | 两数之和
分类:哈希表
题目#
给定一个整数数组 nums 和一个整数 target,需要找出数组中两个不同位置的元素,使它们的和等于 target,并返回这两个元素的下标。
题目保证每组输入恰好存在一个答案。同一个元素不能使用两次。返回的两个下标顺序通常不重要。
示例:
1输入: nums = [2, 7, 11, 15], target = 92输出: [0, 1]3原因: nums[0] + nums[1] = 2 + 7 = 91输入: nums = [3, 2, 4], target = 62输出: [1, 2]1输入: nums = [3, 3], target = 62输出: [0, 1]讲解#
目标是找两个数,它们相加等于 target。
最直接的做法是两层循环,把所有组合都试一遍。时间复杂度是 O(n^2),空间复杂度是 O(1)。
更好的做法是用字典记录已经见过的数字。Python 的字典就是一种哈希表,可以理解成“快速查找表”,这里保存的是:
1数字 -> 下标当遍历到当前数字 num 时,只需要看字典里有没有 target - num。如果有,这两个数就正好组成答案。
哈希表会根据要查的数字快速定位位置,不是像列表那样从头到尾一个个比较。need in seen 查的是字典,平均查找复杂度是 O(1),所以不会把整体复杂度变回 O(n^2)。
关键点是:先查需要的数,再记录当前数。这样不会把同一个元素用两次。
复杂度:
- 暴力做法:时间复杂度
O(n^2),空间复杂度O(1) - 字典做法:时间复杂度
O(n),空间复杂度O(n)
代码#
源码#
1class Solution:2 def twoSum(self, nums: List[int], target: int) -> List[int]:3 _hash = {}4
5 for i,num in enumerate(nums):6 find = target - num7 if( find in _hash ):8 return [_hash[find],i]9 _hash[num] = i10 return []测试#
1from src.python._001_Two_Sum import Solution2
3
4sol = Solution()5assert sol.twoSum([2, 7, 11, 15], 9) == [0, 1]6assert sol.twoSum([3, 2, 4], 6) == [1, 2]7assert sol.twoSum([3, 3], 6) == [0, 1]8
9print("PASS")参考资料#
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
最后更新于 2026-07-31
部分内容可能已过时
相关文章智能推荐
1
LeetCode | 两数相加
LeetCodeLeetCode 两数相加题解:模拟竖式逐位相加,dummy 虚拟头节点串联结果链表,维护 carry 进位。
2
LeetCode | 三数之和
LeetCodeLeetCode 三数之和题解:先排序,再固定一个数并用双指针寻找不重复三元组。
3
LeetCode | 哈希表
LeetCode整理 LeetCode 哈希表题目的核心思路:先建表,再查表。
4
LeetCode | 最长连续序列
LeetCodeLeetCode 最长连续序列题解:使用哈希集合只从连续序列起点开始统计最长长度。
5
LeetCode | 合并两个有序链表
LeetCodeLeetCode 合并两个有序链表题解:双指针遍历比较节点值,dummy 虚拟头节点串联结果链表。
随机文章随机推荐
暂无随机文章
评论区
分享你的想法,与大家交流讨论
--
总访问量
--
访客数
公告
音乐
音乐
暂未播放
0:00/0:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0 天
最后活动
0 天前
最新动态



