双指针
数组
通过两个指针在一个for循环下完成两个for循环的工作。
字符串
定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。
其实很多数组(字符串)填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。
链表
只需要改变链表的next指针的指向,直接将链表反转,而不用重新定义一个新的链表。
使用快慢指针(双指针法),分别定义 fast 和 slow指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。
N数之和
通过前后两个指针不算向中间逼近,在一个for循环下完成两个for循环的工作。
在三数之和的基础上再套一层for循环,依然是使用双指针法。
总结
一般是将降低一个阶数的复杂度,如将O(n^2)的时间复杂度,降为O(n)。