第3章学习笔记:前缀结构、双指针与滑动窗口
课程笔记把重复区间计算压成可增量维护的状态。
关联:章节 第3章 前缀结构、双指针与滑动窗口
第3章笔记:前缀结构、双指针与滑动窗口
目标
把重复区间计算压成可增量维护的状态。
七课依赖
- 一维前缀和与区间查询:围绕一维前缀和与区间查询先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
- 差分数组与批量更新:围绕差分数组与批量更新先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
- 二维前缀和:围绕二维前缀和先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
- 相向双指针:围绕相向双指针先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
- 同向双指针与去重:围绕同向双指针与去重先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
- 滑动窗口的增删不变量:围绕滑动窗口的增删不变量先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
- 离线查询与坐标压缩:围绕离线查询与坐标压缩先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
复杂度与适用条件表
| 算法对象 | 不变量/复杂度来源 | 使用边界 |
|---|---|---|
| 一维前缀和与区间查询 | 围绕一维前缀和与区间查询先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 | 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。 |
| 差分数组与批量更新 | 围绕差分数组与批量更新先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 | 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。 |
| 二维前缀和 | 围绕二维前缀和先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 | 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。 |
| 相向双指针 | 围绕相向双指针先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 | 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。 |
| 同向双指针与去重 | 围绕同向双指针与去重先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 | 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。 |
| 滑动窗口的增删不变量 | 围绕滑动窗口的增删不变量先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 | 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。 |
| 离线查询与坐标压缩 | 围绕离线查询与坐标压缩先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 | 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。 |
复盘
每题保存暴力、优化、证明、四组边界测试和首个WA输入;一周后换数据重做。