这道题老师已经备好课了,直接听就行。一共 7 步,从最笨的办法讲起,一直讲到用哈希表一遍搞定。
- 1两数之和:在数组里找两个数,使它们加起来等于 target。最容易想到的是两层循环两两枚举——但那是 O(n²)。
- 2关键洞察:对每个数,我们真正想知道的是它的另一半在哪。'查找'这件事,就该想到哈希表。
- 3所以准备工作是:建一个 map,键存数值,值存下标。
- 4然后只遍历一遍。站在每个位置,先算出补数 complement = target - nums[i]。
- 5注意这里,全题的灵魂:补数之前见过吗? 见过,说明答案就是当时那个下标和现在的 i。
- 6没见过就把当前数存进 map,继续往前走。每个数只进一次、查一次,所以整体是 O(n)。
- 7总结一下套路:枚举一个,查找另一个。遇到'配对''互补'类问题,先把暴力枚举里的内层查找换成哈希表——这是 Hot 100 里反复出现的模式。
← → 切换步骤 · 空格 暂停/继续