Skip to content

主题文章

算法

从数据结构、不变量和复杂度出发,用 TypeScript 推导并验证常见算法。先掌握数据结构和复杂度,再用不变量、反例与测试推导查找、图、区间和缓存算法。21 篇文章

算法与数据结构

数据结构基础从访问模式出发选择数组、链表、栈、队列、树与图。复杂度分析用时间和空间增长率评估算法,而不是只比较一次运行耗时。数组、哈希与双指针从两数之和开始,理解数组扫描、Map 查找和双指针移动为什么不会漏掉答案。字符串算法从字符单位开始,学习规范化、双指针与滑动窗口。栈与括号匹配利用后进先出不变量解决匹配、撤销与表达式问题。队列与滑动窗口用先进先出和单调队列处理任务流与窗口最大值。链表合并与反转围绕 next 指针不变量完成链表反转与有序合并。链表倒数节点与快慢指针通过固定间距指针处理倒数位置和删除操作。环形链表使用快慢指针判断环、定位入口并分析相遇条件。排序算法理解稳定性、比较器、归并排序和不同数据分布下的取舍。二叉树的迭代遍历用显式栈表达前序、中序和后序遍历。二叉树的递归与层序遍历比较深度优先和广度优先的状态组织方式。二叉搜索树利用有序不变量完成查找、插入、删除和验证。深度优先搜索用递归或栈探索树、图与组合空间。递归与回溯思维把选择、约束、撤销抽象为可验证的搜索树。动态规划从重叠子问题和状态转移建立可复用的求解模型。

查找与字符串

二分查找的边界、不变量与答案空间从“第一个满足条件的位置”推导左右边界模板,解释循环不变量、终止条件和答案空间二分。KMP 字符串匹配:前缀函数与失配回退从朴素匹配重复比较的问题进入最长相等真前后缀,逐步推导前缀表和失配时的状态转移。

图与搜索

BFS、拓扑排序与无权最短路从队列分层进入图的入度、拓扑序和无权最短路径,区分访问时机、环检测与路径恢复。

贪心与区间

贪心算法与区间问题:选择、合并和覆盖用交换论证解释为什么按结束位置排序可以选出最多不重叠区间,并比较合并、覆盖与会议室问题。

缓存数据结构

LRU Cache:哈希表与双向链表的协作从 O(1) 查询、更新和淘汰约束推导哈希表加双向链表,处理容量、覆盖、移动与哨兵节点。