返回

让 LeetCode 1. Two Sum 题解触手可及,打造完美解决方案

见解分享

在这篇技术博文中,我们将深入探讨 LeetCode 中广为人知的 1. Two Sum 问题,并提供一种清晰易懂的解决方案。通过巧妙地运用哈希表,我们将揭示如何在一次遍历中高效地解决这一问题。

前言

LeetCode 1. Two Sum 问题要求我们找到数组中两数之和等于目标和的索引。虽然这乍一看似乎是一项艰巨的任务,但通过采用适当的技术,我们可以简化这一过程,并找到最优的解决方案。

哈希表的魔力

解决此问题的关键在于利用哈希表,它是一种通过键值对快速查找元素的数据结构。哈希表允许我们存储键值对,并通过键值快速查找对应的值。

在我们的解决方案中,我们将哈希表命名为 complements。它将存储数字及其对应的索引。当我们遍历数组时,我们将检查每个数字是否在 complements 中。如果存在,则说明我们找到了两个数字之和等于目标和的索引。

时间复杂度优化

这种方法将时间复杂度降至 O(n),其中 n 是数组的长度。这是因为我们只需要遍历数组一次,而哈希表查找的时间复杂度为 O(1)。

解决方案示例

为了进一步阐明这一解决方案,让我们考虑以下示例:

给定数组 nums = [2, 7, 11, 15] 和目标和 target = 9,我们的解决方案将按如下步骤执行:

  1. 我们将遍历 nums,并将每个数字与其索引一起存储在 complements 中。
  2. 当我们遇到 7 时,我们将检查 complements 中是否存在 2(因为 2 + 7 = 9)。
  3. 由于 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),并确保了代码的可读性和易于理解性。