双指针算法
通用模板,适用于快慢指针和左右指针
如何推断双指针的单调性:反证法特点:将 O ( n 2 ) O(n^2) O(n2)的暴力方法优化为 O ( n ) O(n) O(n)
- 确定两个指针的移动方向一定是单调的,但不一定要一致的。
- 左右指针:i往右走,j往左走。
- 快慢指针:i和j都往右走,但是i比j快。
cpp
for(int i=1,j=1;i<=n;i++){
while(j<i&&check(j,i)){
j++; // or j--
}
}
例题
- AcWing 799. 最长连续不重复子序列:模板题
- 800. 数组元素的目标和:A+B问题,单调性
- 977.有序数组的平方:左右指针,i和j相向运动
- 27. 移除元素
- 2816. 判断子序列
- 209.长度最小的子数组