-
双指针
-
概述
- 优势
-
应用场景
- 同向双指针
- 相向双指针
- 快慢指针
双指针
概述
双指针的核心是使用两个指针同向或相向移动,从而高效的遍历数组或链表等线性数据结构;
这里指针并不是指 C++ 里的指针类型,而是指有指针作用可以指向某个下标或元素的变量;
使用双指针通常需要确定移动的条件和方向(部分题还会需要确定移动的步长);
优势
- 时间复杂度低:双指针算法通常可以在
O(n)的时间复杂度内解决问题,避免了嵌套循环带来的高时间复杂度。
- 空间复杂度低:双指针算法不需要额外的数据结构存储中间结果,空间复杂度通常为
O(1)。
应用场景
同向双指针
21. 合并两个有序链表

这两个指针:
- 移动条件:指向的值更小的指针移动;
- 移动方向:同向;
- 移动速度:都是1个单位;
相向双指针
344. 反转字符串

这里左右指针:
- 移动条件:每次交换字符后,都移动;
- 移动方向:相向;
- 移动速度:都是1个单位;
快慢指针
141. 环形链表

这里双指针:
- 移动条件:每次都移动,直到有一个指针遍历到空节点,或者两个指针相遇;
- 移动方向:相向;
- 移动速度:快指针2个单位,慢指针1个单位;