哈希表将两数之和从o(n²)降为o(n),本质是用空间换时间:单次遍历中边存边查,以o(1)哈希查找替代内层暴力循环,消除嵌套维度。

哈希表对双重循环的“降维打击”,本质是把 O(n²) 的时间消耗,压缩成 O(n) 的单次遍历。不是靠更快地跑,而是绕开了“重复比对”这件事本身。
暴力解法为什么慢?
它不假思索地穷举所有可能的数对:
- 对每个 nums[i],都从 i+1 开始再扫一遍数组,找有没有 target − nums[i]
- 第 1 个数要比较 n−1 次,第 2 个数再比 n−2 次……总操作量接近 n²/2
- 每次查找都是“盲搜”,没有记忆,也没有复用之前的信息
哈希表怎么做到“一次遍历就搞定”?
核心在于:边走边记,边记边查——把“找配对数”的动作,从“回溯扫描”变成“当场查表”。
- 遍历到 nums[i] 时,立刻算出它需要的搭档:need = target − nums[i]
- 马上去哈希表里问:“你见过 need 吗?”——这一步平均只要 O(1) 时间
- 如果见过,直接返回 map.get(need) 和 i;如果没见过,就把 nums[i] 和它的下标 i 存进去,供后面的数来查
为什么说这是“降维”而不是“提速”?
维度,指的是算法结构的嵌套层级:
- 暴力法是二维的:外层定一个数,内层为它配一个数 → 天然嵌套循环
- 哈希表法是一维的:只用一个 for 循环,所有逻辑(查、存、返回)都在这一层完成
- 它把“空间换时间”的思想具象化了:用哈希表这个额外空间,消除了内层循环这个维度
一个直观类比
想象你在图书馆找一本叫《目标数》的书:
- 暴力法:每拿一本书,就从头到尾翻所有其他书,看哪本和它加起来等于目标——翻了又翻
- 哈希表法:你边走边把看过的书名和位置记在小本子上;每次拿到新书,只翻小本子查“目标数减当前书名”有没有被记过——查一次就出结果











