摘要:
这一类的核心思想是:通过排序将无序的区间转化为有序序列,从而将复杂的“全局比较”简化为线性的“相邻比较”。 解题套路: 排序 (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)

浙公网安备 33010602011771号