双指针¶
滑动窗口¶
用于求解满足某条件的最长/短连续子序列。写代码前一定要确定区间范围,[left, right]
或 [left, right)
等。下面采用的区间范围是 [l, r]
。
-
求最长
int l = 0; for (int r = 0; r < N; r++) { // 窗口扩大,加入 r 处的元素 while (l < r && !valid()) { // 窗口缩小,移除 l 处的元素 l++; } if (valid()) { // 更新答案 } }
-
求最短
int l = 0; for (int r = 0; r < N; r++) { // 窗口扩大,加入 r 处的元素 while (l <= r && valid()) { // 更新答案 // 窗口缩小,移除 l 处的元素 l++; } }