返回
勇者无畏,新手入门 Leetcode:两数之和初探【简单题】
闲谈
2024-01-21 10:05:57
【破题关键】
“两数之和”顾名思义,就是在一个整数数组中找到两个数字,其和等于一个给定的目标值。乍一看,这似乎是一道简单的数学题,但当数组规模庞大时,如何高效地找到这两个数字就成了关键。暴力解法虽然直观,但时间复杂度为 O(n^2),效率低下。因此,我们需要寻找更优的解决方案。
【算法详解】
为了提高效率,我们可以采用哈希表(散列表)来解决这个问题。哈希表是一种数据结构,它可以将键值对存储起来,并允许我们通过键快速查找对应的值。
-
构建哈希表:
- 遍历数组中的每一个元素
num
。 - 计算目标值与
num
的差值target - num
。 - 将
target - num
作为键,num
作为值,插入到哈希表中。
- 遍历数组中的每一个元素
-
查找和输出结果:
- 再次遍历数组中的每一个元素
num
。 - 计算目标值与
num
的差值target - num
。 - 检查哈希表中是否存在
target - num
这个键。 - 如果存在,则说明找到了两个和为目标值的数字,输出这两个数字。
- 再次遍历数组中的每一个元素
【代码实现】
def two_sum(nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
hashtable = dict()
for i, num in enumerate(nums):
complement = target - num
if complement in hashtable:
return [hashtable[complement], i]
hashtable[num] = i
return None
【复杂度分析】
- 时间复杂度:O(n),其中 n 为数组的长度。
- 空间复杂度:O(n),哈希表中最多存储 n 个键值对。
【扩展思考】
- 如果数组中存在重复元素,该算法还能正常工作吗?
- 如果目标值很大,如何避免哈希表的碰撞?
- 除了哈希表,还有哪些数据结构可以用来解决这个问题?
【结语】
“两数之和”是 Leetcode 上一道经典的入门级题目。通过这道题,我们学习了如何利用哈希表来提高算法的效率。在后续的 Leetcode 挑战中,我们将继续探索更多有趣且具有挑战性的算法问题。让我们一起努力,在算法的海洋中乘风破浪,不断提升自己的编程能力!