跳到正文

第3章学习笔记:前缀结构、双指针与滑动窗口

课程笔记

把重复区间计算压成可增量维护的状态。

关联:章节 第3章 前缀结构、双指针与滑动窗口

第3章笔记:前缀结构、双指针与滑动窗口

目标

把重复区间计算压成可增量维护的状态。

七课依赖

  • 一维前缀和与区间查询:围绕一维前缀和与区间查询先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 差分数组与批量更新:围绕差分数组与批量更新先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 二维前缀和:围绕二维前缀和先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 相向双指针:围绕相向双指针先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 同向双指针与去重:围绕同向双指针与去重先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 滑动窗口的增删不变量:围绕滑动窗口的增删不变量先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 离线查询与坐标压缩:围绕离线查询与坐标压缩先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。

复杂度与适用条件表

算法对象 不变量/复杂度来源 使用边界
一维前缀和与区间查询 围绕一维前缀和与区间查询先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
差分数组与批量更新 围绕差分数组与批量更新先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
二维前缀和 围绕二维前缀和先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
相向双指针 围绕相向双指针先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
同向双指针与去重 围绕同向双指针与去重先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
滑动窗口的增删不变量 围绕滑动窗口的增删不变量先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
离线查询与坐标压缩 围绕离线查询与坐标压缩先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 窗口方法依赖左右指针的单调移动;含负数时很多和式窗口失效。 本课必须再检查边界输入、整数溢出、下标和不可行状态。

复盘

每题保存暴力、优化、证明、四组边界测试和首个WA输入;一周后换数据重做。