✅ 核心目标:确保完全理解题目,避免因误解而浪费时间。
- 提问确认(关键!):
- "请问输入是否会有负数/空列表/无效数据?"
- "是否需要处理多解或无解的情况?"
- "输出格式是否有特殊要求?"
- 举例说明:用 1~2 个简单例子验证理解(例如,输入
[1,2,3]和target=4,输出是什么?)。 - 边界条件:明确极端情况(如空输入、超大输入、重复元素等)。
✅ 核心目标:提出一个可行解(Brute Force → 优化),并分析复杂度。
- 暴力法优先:即使知道更优解,也先提暴力法(展示思维过程)。
- 优化思路:
- 使用哈希表、双指针、滑动窗口、DP 等常见范式。
- 问面试官:"我可以假设输入数据已排序吗?"(可能简化问题)。
- 复杂度分析:明确说出时间(O(n))和空间复杂度(O(1))。
- 边界处理:提前说明如何应对(例如,数组为空时返回
-1)。
📌 技巧:画图/伪代码帮助解释(如二叉树遍历、链表操作)。
✅ 核心目标:写出 清晰、模块化、无 Bug 的代码。
- 代码结构:
- 拆分辅助函数(如
isValid()、dfs())。 - 避免冗长,用合理的变量名(如
slow_ptr而非i)。
- 拆分辅助函数(如
- 语言细节:
- Python:注意列表切片、字典的
get()方法。 - Java:检查
StringBuildervsString的使用场景。
- Python:注意列表切片、字典的
- 边写边讲:"这里用哈希表存储访问过的元素,以便 O(1) 查找…"
✅ 核心目标:验证代码正确性,展示 Debug 和优化能力。
- 测试用例:
- 常规案例(如
nums=[2,7,11,15], target=9→[0,1])。 - 边界案例(如
nums=[], target=0→null)。 - 特殊案例(如重复元素、负数等)。
- 常规案例(如
- 优化讨论:
- "如果内存有限,可以用排序+双指针替代哈希表,但时间会变慢…"
- "这里可以提前终止循环,减少不必要的计算…"
- 提前练习模板:如二分查找、快排的代码模板,避免现场卡壳。
- 主动沟通:"我有两个思路,您更想听哪种?"
- 幽默感:"这是我第五次写二分查找,终于不会死循环了…" 😄