亚马逊技术面试算法题实战拆解:12 道高频题按难度全拆解(数据驱动)
【免费下载链接】LeetCode-Questions-CompanyWiseContains Company Wise Questions sorted based on Frequency and all time项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Questions-CompanyWise
准备 Amazon 面试别再随机刷题。本文基于 LeetCode-Questions-CompanyWise 项目的亚马逊全量题源数据,把出现频率最高的 12 道算法题按难度拆开讲:每道题该从哪入手、面试官大概率追问什么、当天怎么把过程讲漂亮。
数据从哪来
LeetCode-Questions-CompanyWise 把社区上报的各公司面试真题整理成 CSV 文件。本文取的是 amazon_alltime.csv:每行一道题,含题号、难度、通过率和 frequency(被上报的次数),frequency 越高,说明这道题在亚马逊算法面试频率里越靠前。想核对近况,可以对照 amazon_6months.csv 和 amazon_1year.csv,但 alltime 版本更稳定,用它排优先级就够。
先上一张速查表,12 题的「难度 – 频率 – 考察点」:
| 题号 | 题目 | 难度 | 频率 | 考察点 |
|---|---|---|---|---|
| 937 | Reorder Data in Log Files | Easy | 5.67 | 字符串分类 + 自定义排序 |
| 1 | Two Sum | Easy | 5.34 | 哈希表一次遍历 |
| 819 | Most Common Word | Easy | 5.04 | 字符串清洗 + 词频统计 |
| 200 | Number of Islands | Medium | 5.56 | 网格 DFS / BFS |
| 146 | LRU Cache | Medium | 5.27 | 哈希表 + 双向链表 |
| 973 | K Closest Points to Origin | Medium | 5.16 | 堆 / 排序思想 |
| 138 | Copy List with Random Pointer | Medium | 5.03 | 带交叉引用的链表复制 |
| 5 | Longest Palindromic Substring | Medium | 4.92 | 中心扩展 / 回文 |
| 994 | Rotting Oranges | Medium | 4.81 | 多源 BFS |
| 42 | Trapping Rain Water | Hard | 4.70 | 双指针 + 前缀最大值 |
| 1192 | Critical Connections in a Network | Hard | 5.45 | Tarjan 求桥 |
| 23 | Merge k Sorted Lists | Hard | 4.60 | 优先级队列 / 分治 |
临场答题有个小技巧:先一句话点明「这题属于哪个模板」,比如"这是网格上的多源 BFS",面试官会立刻放心。
Easy:三道题建立手感(自定义排序、哈希查找、字符串清洗)
Reorder Data in Log Files(937,频率 5.67)
- 【考察点】字符串分类加自定义排序,亚马逊特别爱考"规则能不能精确落地"
- 【面试官大概率追问】排序怎么保证稳定?如果规则改成"数字日志也参与排序",代码怎么改?
- 【最易踩的坑】忘了数字日志必须保持原始相对顺序——不稳定的排序一上来就错
Two Sum(1,频率 5.34)
- 【一句话思路】边遍历边往哈希表塞「值 → 下标」,同时查 target 减去当前值是否已在表中
- 【复杂度要点】O(n) 时间、O(n) 空间,一遍过,别写双层循环
- 【面试延伸方向】主动提一句有序数组版本可以改双指针,展示你知道变体边界
Most Common Word(819,频率 5.04)
- 【为什么它高频】题不大,但字符串清洗、禁用词过滤、大小写归一三件事一次考全
- 【解法骨架】
words = 去掉标点并小写(text).split() for w in words: if w not in banned: count[w] += 1 return count 中最大的词真正写起来容易出错的是第一行的清洗,面试时先把它定义清楚
- 【进阶变体】如果输入是海量日志流,就换成分布式聚合,思路不变
Medium:主战场六道(LRU O(1) 实现要点、多源 BFS 等)
LRU Cache(146,频率 5.27)
- 【为什么它高频】亚马逊电话面试的半必考题,考的是哈希表加双向链表的组合拳
- 【解法骨架】
get(key): 命中则把节点移到链表头,返回 val put(key): 已满则删尾节点,新节点插到头部把"移动节点"封装成一个方法,而不是在 get/put 里散着调指针——这一步最容易被忽视
- 【进阶变体】追问 LFU Cache(460)是它的 Hard 近亲,能主动提一句就是加分项
Number of Islands(200,频率 5.56)
- 【考察点】网格洪水填充,DFS 或 BFS 都行,是亚马逊图论板块最稳的高频题
- 【面试官大概率追问】DFS 和 BFS 的栈/队列开销差多少?网格有上亿个点怎么办?
- 【最易踩的坑】从新岛屿出发搜索前忘了标记 visited,递归会原地打转
Rotting Oranges(994,频率 4.81)
- 【为什么它高频】多源 BFS 的模板题,一道题就能验证你是否真懂"BFS 层数等于时间步数"
- 【解法骨架】
queue = 所有初始腐烂橘子 while queue 非空: for i in range(len(queue)): # 按层扩散 弹出节点,感染四周新鲜橘子 time += 1- 【进阶变体】问"每个橘子第几轮腐烂",入队时把轮次一起记上即可
K Closest Points to Origin(973,频率 5.16)
- 【一句话思路】按距离维护大小为 k 的最小堆,超过 k 就弹堆顶;k 接近 n 时直接排序反而更简单
- 【复杂度要点】O(n log k) 对比 O(n log n),n 很大的时候差距明显
- 【面试延伸方向】面试官爱问"堆和快速选择哪个更稳",答"快速选择平均 O(n) 但有波动,工程上堆更可控"就很扎实
Longest Palindromic Substring(5,频率 4.92)
- 【一句话思路】以每个位置为中心向两边扩展(奇偶中心各一次),更新最长区间
- 【复杂度要点】O(n²) 时间、O(1) 空间;DP 写法空间 O(n²),通常不占便宜
- 【面试延伸方向】可以提 Manacher 是 O(n) 但现场用不上,把扩展法写得干净利落更重要
Copy List with Random Pointer(138,频率 5.03)
- 【考察点】带交叉引用的链表复制,考的是"先建全再连引用"的分步意识
- 【面试官大概率追问】除了哈希表法,有没有空间 O(1) 的写法(原链中间插新节点,最后拆链)
- 【最易踩的坑】哈希表法里给 random 赋值的时机错了——必须先把所有新节点都建完,再回头连指针
Hard:决定上限的三道(Tarjan 求桥、双指针接雨水等)
Trapping Rain Water(42,频率 4.70)
- 【一句话思路】双指针从两端向中间走,始终移动左边较小的一侧,水位由两侧最大值中较小者决定
- 【复杂度要点】O(n) 时间、O(1) 空间;单调栈也是 O(n) 但空间 O(n)
- 【面试延伸方向】接一句"二维版本 407 思路类似但要用最小堆",能明显拉开差距
Critical Connections in a Network(1192,频率 5.45)
- 【考察点】无向图找所有桥,Tarjan 低链(low-link)的标准应用
- 【面试官大概率追问】low[u] 为什么取"自身深度、回边到达深度、子树 low"三者最小?复杂度怎么算?
- 【最易踩的坑】从父节点递归到子节点时,把父子边误当回边,low 值直接算错——要显式跳过父边
Merge k Sorted Lists(23,频率 4.60)
- 【为什么它高频】电话面和大面都爱出,且天然连着优先级队列和分治两条路线
- 【解法骨架】
heap = 每条链表的头节点 while heap 非空: 弹出最小节点,接到结果链表 若其 next 存在则入堆- 【进阶变体】分治两两合并也是 O(n log k) 且常数更小,现场先交堆解法再补这一句
一周冲刺节奏
- 第 1–2 天:刷完 Easy 三道加 200、994。这五道练的是"十五分钟内一次写对",做不到就别碰 Hard
- 第 3–4 天:146、138、973,外加 146 的进阶版 460。设计类题目先画图再动手,这个习惯比速度重要
- 第 5 天:42、1192。Hard 题即使想不出完整解,也要练到能写出框架、把思路方向讲清楚
- 第 6–7 天:每天三道、全程计时 45 分钟(含 5 分钟讲解),错题第二天重做一遍,只重做一遍
临场怎么答
- 别急着写代码,花两到三分钟讲清"输入输出 → 思路 → 复杂度",亚马逊面试官对沟通过程本身就在打分
- 卡壳时不要沉默,直接说:"我目前卡住的核心是 X,您希望我继续往 A 方向试,还是给一点提示?"这句话比干等五分钟有用得多
- 最后十分钟切到收尾模式:补边界、报复杂度、自己列两三个测试用例口述验证
看完这篇文章,打开 amazon_alltime.csv,从上表里挑一道 Hard 题,开始你的第一次 45 分钟计时。
【免费下载链接】LeetCode-Questions-CompanyWiseContains Company Wise Questions sorted based on Frequency and all time项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Questions-CompanyWise
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考