返回
想刷爆 LeetCode,来份两数之和最优解题法!
前端
2023-12-04 23:11:22
导语:
踏入 LeetCode 刷题之旅,两数之和是绕不开的经典题目之一。解决两数之和的方法有很多,但如何选择最优解法,则是一门学问。本文将为您揭晓两数之和的最优解题法,带您领略算法的精妙之处。
一、题目概述:
给定一个数组 nums
和一个目标值 target
,找出数组 nums
中的两个数,使得它们的和等于 target
。要求不能重复利用数组中同样的元素。
二、最优解法:
为了快速找到两个加起来等于目标值的数,我们采用 Hash 表作为最优解法。Hash 表是一种数据结构,它可以将键值对存储为哈希表,以便快速查找和检索数据。
-
构建哈希表:
- 首先,我们将数组
nums
中的每个数字作为键,其对应的下标作为值,构建一个哈希表。
- 首先,我们将数组
-
遍历数组:
- 然后,我们遍历数组
nums
中的每个数字。
- 然后,我们遍历数组
-
查找目标值的补数:
- 对于每个数字,我们计算出目标值
target
与其的补数,即target - nums[i]
。
- 对于每个数字,我们计算出目标值
-
检查哈希表:
- 我们检查哈希表中是否包含该补数。
-
找到目标数对:
- 如果哈希表中包含该补数,则说明我们找到了目标数对。
-
更新哈希表:
- 在每次查找补数之前,我们都将当前数字及其下标添加到哈希表中,以备后续查找之用。
三、代码示例:
def twoSum(nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
hash_table = {} # 创建哈希表
for i, num in enumerate(nums): # 遍历数组
complement = target - num # 计算补数
if complement in hash_table: # 检查哈希表中是否包含补数
return [hash_table[complement], i] # 找到目标数对
hash_table[num] = i # 将当前数字及其下标添加到哈希表
return None # 未找到目标数对
# 测试用例
nums = [2, 7, 11, 15]
target = 9
result = twoSum(nums, target)
print(result) # 输出结果:[0, 1]
四、算法分析:
使用哈希表作为最优解法,两数之和的时间复杂度为 O(n),其中 n 是数组 nums
的长度。这是因为我们只需要遍历数组一次,并在哈希表中查找补数。
结语:
通过本文的学习,您已经掌握了LeetCode经典题目「两数之和」的最优解题法,采用 Hash 表可以将时间复杂度降到 O(n)。希望本文能帮助您在 LeetCode 的刷题之旅中更上一层楼!