二分查找框架:一套模板搞定元素搜索与左右边界
把「搜索一个元素」「搜索左边界」「搜索右边界」收敛到同一个左闭右开骨架 [left, right) 上:三处填空(判断条件、收缩方向、返回值)怎么填,lowerBound 和 upperBound 只差一个比较符号,右边界为什么是 upperBound - 1,以及 mid 溢出、死循环、返回值越界三张排查清单。附 C / C++ / JavaScript 三语言实现。
5219 字
|
26 分钟
差分数组实战:区间加法、航班预订、拼车三题一套模板,以及差分的四类延伸
把 LeetCode 370 区间加法、1109 航班预订统计、1094 拼车收敛到同一套「两端打点 + 前缀和还原」模板:多开一位怎么写、1-indexed 怎么转、终点为什么是右开,附 C / C++ / JavaScript 三语言实现;最后延伸到二维差分、树上差分、扫描线思想与结构选型。
5254 字
|
26 分钟
前缀和实战:数组不可变、矩阵不可变的区间查询,以及它答不了的题
把 LeetCode 303 / 304 两道 "Immutable" 题收敛到同一套「多开一位」模板:一维 pre[r+1] - pre[l]、二维容斥四个角怎么来,附 C / C++ / JavaScript 三语言实现;最后聊前缀和答不了的四类问题(动态修改、无逆元运算、溢出、丢失内部结构),以及该换成什么结构。
4474 字
|
22 分钟
滑动窗口算法经典习题(二):换状态、反向转化与枚举维度
四道进阶滑动窗口真题精讲:存在重复元素 II、存在重复元素 III、将 x 减到 0 的最小操作数、至少有 K 个重复字符的最长子串。分别演示把窗口状态换成哈希表与分桶、把题目反向转化、以及枚举维度这三种变形,附 C / C++ / JavaScript 实现。
8968 字
|
45 分钟
滑动窗口算法经典习题(一):窗口内的和、积与计数
四道变长窗口真题精讲:长度最小的子数组、乘积小于 K 的子数组、最大连续 1 的个数 III、替换后的最长重复字符。每题给出三个问题的答案、过程图解、易错点和 C / C++ / JavaScript 三语言实现。
6562 字
|
33 分钟
滑动窗口核心代码模板:三个问题搞定所有子串、子数组题
从最小覆盖子串、字符串的排列、找到所有字母异位词、无重复字符的最长子串四道真题中提炼出一套统一的滑动窗口模板,回答「何时扩张、何时收缩、何时更新结果」三个问题,并解释窗口区间为什么推荐写成左闭右开。附 C / C++ / JavaScript 三语言实现。
7954 字
|
40 分钟
数组双指针经典习题(一):一维数组与字符串
力扣「数组和双指针」入门计划前五题精讲:删除有序数组中的重复项、验证回文串、颜色分类、合并两个有序数组、有序数组的平方。每题给出指针不变量、过程图解、易错点和 C / C++ / JavaScript 三语言实现。
6017 字
|
30 分钟
数组双指针经典习题(二):矩阵与字符串
力扣「数组和双指针」入门计划后四题精讲:将矩阵按对角线排序、二维网格迁移、转置矩阵、最长公共前缀。围绕 i - j 标识对角线、展平加索引映射、三次反转、纵向扫描等技巧,附 C / C++ / JavaScript 三语言实现。
5788 字
|
29 分钟