两数之和:哈希(LeetCode 热题 100)

一、问题描述

二、解题代码

解法一、暴力

python 复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        n = len(nums)
        for i in range(n):
            for j in range(i+1,n):
                if nums[i]+nums[j] == target:
                    s = [i,j]
                    return s

解法二、哈希

python 复制代码
from typing import List
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hash_dict = {}  # 空字典,格式 {数字:下标}
        for idx, num in enumerate(nums):
            need = target - num  # 算出需要配对的数字
            # 判断需要的数字,之前有没有遍历到
            if need in hash_dict:
                # hash_dict[need] = 配对数字的下标
                # idx = 当前数字的下标
                return [hash_dict[need], idx]
            # 没找到配对,把当前数字和下标存入字典
            hash_dict[num] = idx
小技巧:字典【数字:下标】

新建的字典中,把需要的数字当作下标存储,而该字典的值为原数列的下标。

例:

  • i=0, num=2,need=7,字典无 7 → 执行 hash_dict[2] = 0
  • i=1, num=7,need=2,字典存在 2 → 取出 hash_dict[2]=0,直接得到答案
为什么要存 数字:下标
  1. 查询速度极快:字典查找是 O (1),暴力两层循环是 O (n²)
  2. 反向存储:把 "值" 作为 key,下标作为 value,通过目标差值反向定位历史下标
  3. 避免二次循环:每走一个元素只做一次减法 + 一次查表,一遍数组就能解完

三、区别:

  1. 你的暴力双层循环 固定第 i 个数字,只和 它后面所有数字 j(j>i) 配对求和,往后找。两层循环,重复计算多,效率低。

  2. 哈希字典单层循环 走到第 idx 个数字时,只去字典查 它前面所有数字(前面的已经提前存进字典里),往前找互补数。只遍历数组一次,前面的数据存在字典里快速查询,不用重复循环。


补充关键优势:为什么 "往前找" 更快?

暴力法:每一个数字都要和后面全部数字比对,总比对次数 n*(n-1)/2,数组越长越卡。哈希法:每个数字只做一次减法、一次字典查询(查询速度近似瞬间完成),全程只走一遍数组。

举同一个例子印证逻辑 nums=[2,7,11,15], target=9

  • 暴力:i=0(数字 2),依次和 j=1、j=2、j=3 相加,到 j=1 匹配成功。
  • 哈希:走到 idx=1(数字 7),往前查已存入字典的数字 2,直接匹配成功。

补充避坑点

哈希代码里先判断、再存入,就是为了保证永远只查前面的数字,绝对不会取到当前自身,完美满足题目 "不能使用两次相同元素" 的限制。

相关推荐
octopus_c17 小时前
数据结构:堆(Heap)详解
c语言·数据结构·算法
爱吃苹果的梨叔19 小时前
训练集群网络中断怎么办?智算机房的 Console 串口排障方案
网络·python·智能路由器·php
李妍.1 天前
02Numpy基础(上)
开发语言·python
TheBestRucy1 天前
Python 九阳神功之贰:面向对象(下)
开发语言·python
YH55269841 天前
GPT‑5.6 Sol 原本支持 1M 上下文,Codex 现已放开此前限制,如何看待这次调整?
java·jvm·人工智能·gpt·算法·chatgpt
2601_965958461 天前
口腔黏膜脱皮超2周未愈建议及时就医
人工智能·python
微小冷1 天前
在不同空间中展示数据(欧式、球面、庞加莱圆盘)
python·双曲空间·微分几何·geomstats·庞加莱圆盘·球面
weixin_431600441 天前
Agent Workflow 学习向:Code 节点,比模板更强的变量加工
后端·python·学习·ai·
遥感知识服务1 天前
从局部阈值、双极化到暗地表剔除:NASA OPERA DSWx-S1全球动态水体算法拆解
大数据·人工智能·深度学习·神经网络·算法·机器学习
讲温控就好了1 天前
从医疗影像到能源存储——芯片冷却温控技术的跨行业赋能
人工智能·python·能源