【LeetCode】1.两数之和

目录

      • [📚 题目概要](#📚 题目概要)
      • [🧰 前置知识](#🧰 前置知识)
      • [🚧 问题难点](#🚧 问题难点)
      • [🔑 关键思路](#🔑 关键思路)
      • [💻 代码实现](#💻 代码实现)
      • [📊 复杂度分析](#📊 复杂度分析)
      • [❗ 易错点与测试案例](#❗ 易错点与测试案例)
      • [🔗 总结与扩展](#🔗 总结与扩展)

📚 题目概要

在整数数组中找到两个数,它们的和等于目标值,并返回这两个数的下标。假设每个输入只有唯一解,且不能重复使用同一元素。


🧰 前置知识

  • 哈希表:快速查找元素是否存在(O(1)时间复杂度)
  • 数组遍历:理解如何遍历数组并记录中间状态

🚧 问题难点

  • 暴力法不可行:双重循环时间复杂度为O(n²),无法应对大数据量。
  • 如何高效匹配补数 :如何在遍历过程中快速判断"当前元素的补数(target - num)"是否已出现过。

🔑 关键思路

步骤拆解
  1. 补数思想 :对于每个元素num,计算其补数complement = target - num
  2. 哈希表记录历史:用字典存储已遍历元素的值和索引,键为元素值,值为索引。
  3. 实时匹配 :遍历时检查当前元素的补数是否存在于字典中:
    • 存在 → 返回补数的索引和当前索引
    • 不存在 → 将当前元素存入字典,继续遍历

💻 代码实现

python 复制代码
def twoSum(nums, target):  
    num_map = {}  # 键为元素值,值为索引  
    for i, num in enumerate(nums):  
        complement = target - num  
        if complement in num_map:  # 补数存在于字典中,直接返回结果  
            return [num_map[complement], i]  
        num_map[num] = i  # 记录当前元素信息  
    return []  # 题目保证有解,此return仅为语法需要  
代码注释
  • 第2行:初始化空字典,用于存储已遍历元素的值和索引。
  • 第3行 :遍历数组,enumerate同时获取下标i和元素值num
  • 第4行:计算当前元素需要的补数。
  • 第5-6行:若补数已存在字典中,返回补数的索引和当前索引。
  • 第7行:若补数不存在,将当前元素存入字典。

📊 复杂度分析

  • 时间复杂度:O(n),仅需一次遍历,哈希表插入和查询均为O(1)。
  • 空间复杂度:O(n),最坏情况下需存储所有元素。

❗ 易错点与测试案例

易错点
  1. 重复元素处理 :例如输入nums = [3, 3], target = 6,需确保两个3的索引均被正确记录。
  2. 补数为自身 :如nums = [2, 7], target = 4,此时补数为2,但需避免返回[0, 0](题目保证解不重复使用元素)。
测试案例
  • 案例1

    python 复制代码
    nums = [2, 7, 11, 15]  
    target = 9  
    输出: [0, 1]  # 2 + 7 = 9  
  • 案例2

    python 复制代码
    nums = [3, 2, 4]  
    target = 6  
    输出: [1, 2]  # 2 + 4 = 6  
  • 案例3

    python 复制代码
    nums = [3, 3]  
    target = 6  
    输出: [0, 1]  # 正确处理重复元素  

🔗 总结与扩展

模式归纳
  • 哈希表映射法:适用于"快速查找历史数据是否满足条件"的场景。
  • 同类问题
    • 《三数之和》:转化为两数之和问题。
    • 《两数之和 II - 输入有序数组》:利用有序特性,双指针法解决。
核心思维
  • 空间换时间:通过哈希表存储中间状态,将暴力法的O(n²)优化为O(n)。
  • 实时匹配:遍历时动态维护哈希表,确保每次查询的补数均为已遍历元素,避免重复使用。
相关推荐
达文汐4 天前
【困难】力扣算法题解析LeetCode332:重新安排行程
java·数据结构·经验分享·算法·leetcode·力扣
沉默-_-6 天前
备战蓝桥杯--栈
数据结构·算法·力扣·
苦藤新鸡9 天前
41.有序数组(二叉搜索树)转平衡二叉树
数据结构·力扣
苦藤新鸡11 天前
36.二叉树的中序遍历(递归)
力扣
苦藤新鸡11 天前
37.二叉树的最大深度
力扣
苦藤新鸡11 天前
39.判断对称二叉树
数据结构·力扣
Anastasiozzzz12 天前
力扣hot100 20.有效的括号 解析
java·算法·面试·力扣
苦藤新鸡12 天前
29.删除倒数第N个节点
数据结构·链表·力扣
苦藤新鸡13 天前
28.两数相加,进位制
数据结构·算法·链表·力扣
苦藤新鸡15 天前
20.右旋转图片
数据结构·算法·leetcode·力扣