当前位置: 首页 > ds >正文

【LeetCode】1.两数之和

目录

      • 📚 题目概要
      • 🧰 前置知识
      • 🚧 问题难点
      • 🔑 关键思路
        • 步骤拆解
      • 💻 代码实现
        • 代码注释
      • 📊 复杂度分析
      • ❗ 易错点与测试案例
        • 易错点
        • 测试案例
      • 🔗 总结与扩展
        • 模式归纳
        • 核心思维


📚 题目概要

在这里插入图片描述

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


🧰 前置知识

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

🚧 问题难点

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

🔑 关键思路

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

💻 代码实现

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
    nums = [2, 7, 11, 15]  
    target = 9  
    输出: [0, 1]  # 2 + 7 = 9  
    
  • 案例2
    nums = [3, 2, 4]  
    target = 6  
    输出: [1, 2]  # 2 + 4 = 6  
    
  • 案例3
    nums = [3, 3]  
    target = 6  
    输出: [0, 1]  # 正确处理重复元素  
    

🔗 总结与扩展

模式归纳
  • 哈希表映射法:适用于“快速查找历史数据是否满足条件”的场景。
  • 同类问题
    • 《三数之和》:转化为两数之和问题。
    • 《两数之和 II - 输入有序数组》:利用有序特性,双指针法解决。
核心思维
  • 空间换时间:通过哈希表存储中间状态,将暴力法的O(n²)优化为O(n)。
  • 实时匹配:遍历时动态维护哈希表,确保每次查询的补数均为已遍历元素,避免重复使用。
http://www.xdnf.cn/news/893.html

相关文章:

  • 关于springmvc的404问题的一种猜测解决方案
  • Unity接入安卓SDK(2)接入方式
  • class com.alibaba.fastjson.JSONObject cannot be cast to class
  • Docker 镜像、容器和 Docker Compose的区别
  • 使用PyTorch实现图像增广与模型训练实战
  • 版本控制利器——SVN简介
  • SVN权限配置及连接指南
  • 年化112.5%,最大回撤24.3%,卡玛比率4.62 | polars因子引擎重构完成(python源代码下载)
  • android的 framework 有哪些知识点和应用场景
  • 如何修复WordPress中“您所关注的链接已过期”的错误
  • uniapp打ios包
  • Spark_SQL
  • 第十四届蓝桥杯 2023 C/C++组 有奖问答
  • 算法 | 鲸鱼优化算法(WOA)原理,公式,应用,算法改进研究综述,完整matlab代码
  • 集成学习实际案例
  • 如何在量子计算时代保障 Sui 的安全性
  • C++模板进阶
  • 5.2.1 CallerMemberName的使用
  • Java 服务器端 jar 包内 class 文件替换与配置文件修改高级技术指南
  • SQL 使用 UPDATE FROM 语法进行更新
  • C++回溯算法详解
  • 在线查看【免费】vsd, vsdx/wmf, emf /psd, eps/pdf ,ofd, rtf/xmind/bpmn/eml/epub文件格式网
  • Elasticsearch插件:IDEA中的Elasticsearch开发利器
  • 【Unity笔记】Unity音视频播放监听器封装笔记:VideoPlayer + AudioSource事件触发与编辑器扩展
  • leetcode:LCP 01. 猜数字(python3解法)
  • 并发设计模式之双缓冲系统
  • 10天学会嵌入式技术之51单片机-day-4
  • 安装WSL2.0
  • LX4-数据手册相关
  • 一个很简单的机器学习任务