返回
让 LeetCode 1. Two Sum 题解触手可及,打造完美解决方案
见解分享
2023-12-18 01:38:55
在这篇技术博文中,我们将深入探讨 LeetCode 中广为人知的 1. Two Sum 问题,并提供一种清晰易懂的解决方案。通过巧妙地运用哈希表,我们将揭示如何在一次遍历中高效地解决这一问题。
前言
LeetCode 1. Two Sum 问题要求我们找到数组中两数之和等于目标和的索引。虽然这乍一看似乎是一项艰巨的任务,但通过采用适当的技术,我们可以简化这一过程,并找到最优的解决方案。
哈希表的魔力
解决此问题的关键在于利用哈希表,它是一种通过键值对快速查找元素的数据结构。哈希表允许我们存储键值对,并通过键值快速查找对应的值。
在我们的解决方案中,我们将哈希表命名为 complements。它将存储数字及其对应的索引。当我们遍历数组时,我们将检查每个数字是否在 complements 中。如果存在,则说明我们找到了两个数字之和等于目标和的索引。
时间复杂度优化
这种方法将时间复杂度降至 O(n),其中 n 是数组的长度。这是因为我们只需要遍历数组一次,而哈希表查找的时间复杂度为 O(1)。
解决方案示例
为了进一步阐明这一解决方案,让我们考虑以下示例:
给定数组 nums = [2, 7, 11, 15] 和目标和 target = 9,我们的解决方案将按如下步骤执行:
- 我们将遍历 nums,并将每个数字与其索引一起存储在 complements 中。
- 当我们遇到 7 时,我们将检查 complements 中是否存在 2(因为 2 + 7 = 9)。
- 由于 2 存在于 complements 中,我们返回索引 [0, 1],因为 2 和 7 之和为 9。
代码实现
def twoSum(nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
complements = {}
for i, num in enumerate(nums):
complement = target - num
if complement in complements:
return [complements[complement], i]
complements[num] = i
总结
通过利用哈希表,我们开发了一种高效且清晰的解决方案来解决 LeetCode 1. Two Sum 问题。这种方法将时间复杂度降低到 O(n),并确保了代码的可读性和易于理解性。