一、设计题的考察本质
面试设计题不考"背 API",考的是组合基础结构达成目标复杂度的能力。核心思路:
单一结构无法满足所有操作的复杂度要求时,用多个结构互补。
| 题目 | 目标 | 结构组合 |
|---|---|---|
| LC 380. O(1) 插入/删除/随机获取 | 三个操作均 O(1) | 数组 + 哈希表 |
| LC 155. 最小栈 | push/pop/min 均 O(1) | 主栈 + 辅助栈 |
| LC 460. LFU 缓存 | get/put O(1) | 哈希表 + 频率桶双向链表 |
| LC 232. 用栈实现队列 | 均摊 O(1) | 双栈 |
| LC 225. 用队列实现栈 | 单队列 O(1) push | 队列重排 |
Mermaid · 渲染中(下方为源码)
graph LR Q[设计目标] --> S[单一结构不足] S --> C[多结构互补] C --> A[数组+哈希] C --> B[主栈+辅栈] C --> D[哈希+频率桶]
二、LC 380:O(1) 时间插入、删除和获取随机元素
2.1 难点分析
- 数组:O(1) 随机访问、O(1) 尾部插入,但删除 O(n)