双指针与滑动窗口面试题总结:数组、链表、字符串高频模板
双指针通过两个位置共同描述搜索范围。相向指针常用于有序数组求和与回文判断;同向快慢指针适合原地去重、链表环和写入压缩;滑动窗口则维护一段连续区间及其统计量。
滑动窗口的通用步骤是右端不断纳入元素并更新计数,当窗口违反约束时移动左端并撤销影响,恢复合法后记录答案。求最短满足窗口时,合法后应尽可能收缩;求最长合法窗口时,通常在恢复合法后更新最大长度。
1 | left = 0 |
算法高效的原因不是只有一层循环,而是左右指针都只单调前进,最多各走 n 次,所以总时间 O(n)。窗口统计可用整数、哈希表或定长频次数组,空间由字符集或键数量决定。若元素含负数,“窗口和过大就缩小”的单调性可能消失,此时需要前缀和、单调队列等方案。
有序两数之和中,和偏小就移动左指针,偏大就移动右指针,因为有序性保证被排除位置不可能产生答案。三数之和可先排序,固定一个元素后做相向扫描,并处理重复值。
常见误区是混淆窗口何时更新答案、移出元素后不删除零计数、忽略空窗口、对无单调性问题强套滑窗,以及把嵌套循环误判为 O(n²)。小结:写清窗口表示什么、何时合法以及每次移动为何不会漏解,模板才有意义。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dai Wei!
评论

