摘要: 这一类的核心思想是:通过排序将无序的区间转化为有序序列,从而将复杂的“全局比较”简化为线性的“相邻比较”。 解题套路: 排序 (Sort): 通常按 左端点 (start) 升序排序(用于合并、插入)。 有时按 右端点 (end) 升序排序(用于贪心选点,如射气球)。 线性扫描 (Linear Sc 阅读全文
posted @ 2026-03-08 22:04 scales123 阅读(5) 评论(0) 推荐(0)
摘要: 这一类的核心思想是:在每一步选择中都采取在当前状态下最好/最优的选择(局部最优),从而希望导致结果是全局最优的。 适用场景: 问题可以分解为多个步骤,且每一步的选择互不干扰(或干扰可被局部最优覆盖)。 具有“贪心选择性质”和“最优子结构”。 常见于:区间问题、分配问题、跳跃问题、霍夫曼编码等。 解题 阅读全文
posted @ 2026-03-08 22:00 scales123 阅读(5) 评论(0) 推荐(0)
摘要: 这一类的核心思想是:将复杂问题分解为重叠子问题,通过记录子问题的解(状态)来避免重复计算。 解题四步曲: 定义状态 (dp 数组):dp[i] 代表什么含义?(例如:爬到第 i 阶的方法数、前 i 个元素的最大和)。 状态转移方程:如何从已知状态推导出未知状态?(例如:dp[i] = dp[i-1] 阅读全文
posted @ 2026-03-08 21:57 scales123 阅读(12) 评论(0) 推荐(0)
摘要: 这一类的核心思想是:暴力搜索的优化版。通过“试错”来寻找所有可能的解。 核心模板:void backtrack(路径, 选择列表) { if (满足结束条件) { 结果集.add(路径); return; } for (选择 : 选择列表) { 做选择; backtrack(路径, 选择列表); 撤 阅读全文
posted @ 2026-03-08 21:55 scales123 阅读(10) 评论(0) 推荐(0)
摘要: 这一类的核心思想是:递归(DFS)与层次遍历(BFS)。 递归 (DFS):二叉树的天然定义就是递归的(根 + 左子树 + 右子树)。绝大多数题目(深度、对称、翻转、LCA)都可以用简洁的递归解决。 前序:处理根 -> 左 -> 右(适合复制、翻转)。 中序:左 -> 处理根 -> 右(适合 BST 阅读全文
posted @ 2026-03-08 21:53 scales123 阅读(10) 评论(0) 推荐(0)
摘要: 这一类的核心思想是:指针操作的艺术。 虚拟头结点 (dummy):解决头结点可能被修改或删除的特殊情况,统一操作逻辑。 双指针: 快慢指针:找中点、判环、找倒数第 N 个。 前后指针:反转链表、删除节点。 递归:将大问题分解为“处理当前节点 + 递归处理剩余链表”。 辅助结构:优先队列(堆)用于合并 阅读全文
posted @ 2026-03-08 21:37 scales123 阅读(4) 评论(0) 推荐(0)
摘要: 这一类的核心思想是:利用有序性(或单调性),每次排除一半的搜索空间,将时间复杂度从 $O(N)$ 降低到 $O(\log N)$。 基础二分:在有序数组中查找特定值。 进阶二分:寻找边界(第一个/最后一个满足条件的元素)、寻找旋转点、或在答案空间上进行二分(如“最小化最大值”问题)。 核心模板: w 阅读全文
posted @ 2026-03-08 21:33 scales123 阅读(6) 评论(0) 推荐(0)
摘要: 这一类的核心思想是:利用栈的“后进先出”特性,维护一个有序序列(单调栈)或处理嵌套结构。 单调栈:用于解决 “下一个更大/更小元素” (Next Greater/Smaller Element) 问题。通过维护一个单调递增或递减的栈,可以在 $O(N)$ 时间内找到每个元素左右两侧第一个比它大/小的 阅读全文
posted @ 2026-03-08 21:31 scales123 阅读(11) 评论(0) 推荐(0)
摘要: 这一类的核心思想是:将“子数组求和”问题转化为“两数之差”问题。 定义 preSum[i] 为从数组开头到第 i 个元素的累加和。 任意子数组 nums[j...i] 的和可以表示为:preSum[i] - preSum[j-1]。 如果我们要找和为 k 的子数组,即寻找满足 preSum[i] - 阅读全文
posted @ 2026-03-08 21:23 scales123 阅读(1) 评论(0) 推荐(0)
摘要: 这一类的核心思想是:维护一个动态的窗口 [left, right]。 扩张:right 指针不断向右移动,将新元素纳入窗口。 收缩:当窗口内的数据满足特定条件(如和达标、出现重复、覆盖所有字符)时,尝试移动 left 指针缩小窗口,以寻找更优解(最短长度)或维持合法性。 状态维护:通常需要一个变量( 阅读全文
posted @ 2026-03-07 17:12 scales123 阅读(4) 评论(0) 推荐(0)