双指针Two pointers
协调两个位置,利用顺序或单调性避免重复扫描。
- 核心约束
- 指针移动必须保持候选集合或匹配条件。
- 适用问题
- 有序合并、区间扫描与成对查找。
- 边界与取舍
- 不是所有双重索引都能化为线性时间。
时间与空间#
n 为元素数;两个指针只朝约定方向推进。
- 时间成本
- 满足单调推进和 更新时
- 空间成本
- 常见数组扫描
每个指针移动总次数受 n 限制,两个嵌套 while 不必意味着平方时间。相向双指针求和需要有序输入;若先排序,还需加入排序时间。反复回退指针则需重新分析。
基础原理参考资料
USACO Guide · Two Pointers同向窗口、相向扫描和每个指针只线性移动的分析。