每个专题都是确定性的浏览器动画:源码、内存方格、CPU 阶段和调用栈在同一个执行轨迹里联动。
目录映射完整面试题型。当前每个题型都已接入执行 trace。
匹配失败时,为什么 haystack 的 i 不回退。
为什么 left、right、mid 的更新不会跳过答案。
为什么窗口失效时才移动左指针。
哈希表加双向链表为什么能让 get 和 put 都是 O(1)。
为什么 slow/fast 可以安全原地覆盖,不需要额外数组。
map 如何把查找、去重、频次比较变成 O(n)。
如何用排序 key、起点标记和候选压缩重塑问题。
为什么移动某一侧指针可以安全排除大量暴力枚举组合。
为什么区间题通常先排序,再维护一个正在合并的区间。
prev、cur、next、dummy、tail 如何让链表代码稳定。
为什么要先移动再比较,避免一开始就误判相遇。
后进先出和先进先出如何决定数据结构题的写法。
为什么嵌套结构和逆波兰表达式适合用栈解析。
为什么大小为 k 的堆只保留有用候选值。
如何通过扫描、切片和前缀检查减少越界与漏字符。
如何用递归函数定义一棵子树要完成的工作。
为什么要先固定当前层队列长度,再加入下一层节点。
访问时机如何决定遍历序列的含义。
BST 的有序性如何把树题变成范围和中序问题。
路径记录、递归返回增益和全局最优答案有什么区别。
如何用根节点位置、中序切分和空节点标记重建结构。
路径、选择列表、结束条件和撤销选择如何生成搜索树。
visited 状态和四方向数组如何把矩阵变成图。
邻接表、入度和前沿扩张如何建模图题。
父指针如何把连通性问题压缩成 find/union。
前缀树和切分 DP 如何解决单词查找问题。
状态定义、初始化、状态转移和答案提取如何连在一起。
如何说明局部选择不会破坏全局最优。
为什么单调栈通常存还没解决的下标,而不只存值。
子数组和问题如何变成两个前缀和的差。
单调可行性函数如何把最优化问题变成搜索问题。
如何组合多种结构来满足每个操作的复杂度约束。
行、列和层边界如何控制矩阵遍历与原地修改。
排序、分区和归并边界如何支撑大量面试题解。
二进制表示、进位、取模和幂如何解释紧凑题解。
区间更新如何变成边界事件和前缀累加。
优先队列和边排序如何解决加权最短路与连通成本问题。
树状数组、线段树和有序集合如何支持动态区间查询。
哈希、回文半径和 Z box 如何复用已有比较。