算法刷题之题型总结(持续更新ing)
一、数组滑动窗口left和right两个指针构建起一个动态window再根据数据处理需要扩大或缩小窗口。注意对窗口边界值处理和窗口变化机制的理解/* 滑动窗口算法框架 */ void slidingWindow(string s, string t) { unordered_mapchar, int need, window; for (char c : t) need[c]; int left 0, right 0; int valid 0; while (right s.size()) { // c 是将移入窗口的字符 char c s[right]; // 增大窗口 right; // 进行窗口内数据的一系列更新 ... /*** debug 输出的位置 ***/ printf(window: [%d, %d)\n, left, right); /********************/ // 判断左侧窗口是否要收缩 while (window needs shrink) { // d 是将移出窗口的字符 char d s[left]; // 缩小窗口 left; // 进行窗口内数据的一系列更新 ... } } }209 长度最小的子数组904 水果成篮 涉及哈希表76 最小覆盖子字符串438字母异位词和76对比来看二、双指针206 反转链表19 删除链表倒数第n个节点142 环形链表160 链表相交15 三数之和18 四数之和27 移除元素0054 替换数字三、哈希表使用hash的情况当我们需要查询一个元素是否出现过或者一个元素是否在集合里的时候字母异位词 242 49 438双指针有点复杂 当时不太理解 需要重做151 翻转字符串里面的单词四、二叉树用递归函数的返回值操作450.删除二叉搜索树中的节点701.二叉搜索树中的插入操作构造二叉树找分割点 递归左区间和右区间106.从中序与后序遍历序列构造二叉树654.最大二叉树pre指针530.二叉搜索树的最小绝对差501.二叉搜索树中的众数538.把二叉搜索树转换为累加树参考【算法思想·数组】滑动窗口终极模板题目均为leetcode