使用两个指针从不同位置遍历数组,常用于有序数组、链表问题

什么是双指针

双指针是一种算法技巧,通过同时维护两个指针(索引),在一次遍历中完成需要嵌套循环才能完成的操作。

🎯 为什么使用?

将 O(n²) 的暴力解法优化到 O(n)。当问题涉及有序数组的配对查找、原地修改、或者需要从两端向中间逼近时,双指针是首选。

⚙️ 如何工作?

1. 对撞指针:两个指针分别从数组两端向中间移动,每次根据条件移动其中一个 2. 快慢指针:两个指针同向移动,但速度不同,用于原地修改、找中点、检测环 3. 每次移动都排除不可能的解空间,保证不遗漏

🎨 形象比喻

想象两个人从走廊两端走向彼此。如果他们的距离和太大,离得远的那个人往前走一步;如果太小,另一个人往前走。直到他们刚好碰面。

🔍 识别关键词

当你在题目中看到以下关键词时,考虑使用双指针

有序数组两数之和回文反转合并去重移动零

📊 时间空间复杂度

时间复杂度
O(n)
空间复杂度
O(1)

只需遍历一次数组,使用固定的额外空间存储指针

?查看快捷键