本文意在总结常见的 算法技巧的题型和模板 ,并不断更新。
此处算法技巧指的不是传统套路算法,例如滑动窗口,二分等,而更像是某种 算法思想 或者 题目套路 。
下面按照算法技巧中用到的数据结构进行分类总结:
堆
- 本质:能在 维护 数组内元素不断变化 的同时,还得能很快找到 数组内的最大值(最小值) ,这就是 堆 。
具体 技巧的题型和模板 分别参考以下题解:
- 经典数组TopK(基础)
- 矩阵(二维)TopK(基础)
- 贪心堆 / 懒删除堆(基础)
- 【 关键问题:堆模拟 和 构造 相邻元素值不同 的数组 】
- 反悔(贪心)堆
哈希表
- 前缀和+哈希表(基础)
- 【 关键问题:找符合要求的 子数组和 的 最大最小长度/个数 】
- 两数之和思想应用题(基础)
栈
- 栈+字符串匹配(基础)
- 【 关键问题:利用栈的性质实现 一个字符匹配其左边的离它最近的字符 (经典题目:括号题等)】
- 栈妙解根据相邻元素删除元素的题目(基础)
- 【 关键问题:根据 相邻元素的性质 来删除元素,用栈模拟】
数组
- 前后缀分解(基础)
- 【 关键问题:借助维护 前缀数组 和 后缀数组 的信息,完成统计 (经典题目:接雨水等)】
- 进位制转换(基础)
- 贡献法(进阶)
- 【 关键问题:评估 每一个数组元素对于答案的贡献度 】
- 差分数组(基础)
- 【 关键问题:维护一个 子数组同时加上/减去一个数 】
- 回文子串中心拓展法(基础)
- 分组循环(基础)
- 【 关键问题:数组会被 分割成若干组 ,且 每一组的判断/处理逻辑是一样的 。 】
- 预处理回文数(进阶)
- 贪心构造0-n(进阶)
- 中位数贪心(基础)
- 【 关键问题:求数轴上有 n 个点,然后求 一个数使得该点到数轴上所有点的距离之和最小 ,那这个数一定是在 最中间的点 处。 】
- 区间合并(基础)