使用两个指针从不同位置遍历数组,常用于有序数组、链表问题
❓ 什么是双指针?
双指针是一种算法技巧,通过同时维护两个指针(索引),在一次遍历中完成需要嵌套循环才能完成的操作。
🎯 为什么使用?
将 O(n²) 的暴力解法优化到 O(n)。当问题涉及有序数组的配对查找、原地修改、或者需要从两端向中间逼近时,双指针是首选。
⚙️ 如何工作?
1. 对撞指针:两个指针分别从数组两端向中间移动,每次根据条件移动其中一个
2. 快慢指针:两个指针同向移动,但速度不同,用于原地修改、找中点、检测环
3. 每次移动都排除不可能的解空间,保证不遗漏
🎨 形象比喻
「想象两个人从走廊两端走向彼此。如果他们的距离和太大,离得远的那个人往前走一步;如果太小,另一个人往前走。直到他们刚好碰面。」
🔍 识别关键词
当你在题目中看到以下关键词时,考虑使用双指针:
有序数组两数之和回文反转合并去重移动零
📊 时间空间复杂度
时间复杂度
O(n)
空间复杂度
O(1)
只需遍历一次数组,使用固定的额外空间存储指针
按?查看快捷键