初步对双指针题型做总结:
个人理解,双指针在于将2层for降低为1次for。
功能上:有快慢/读写/前后作用
数组
27. 移除元素
快(读)指针遍历数组
慢(写)指针更细数组
字符串
344. 反转字符串--实现reverse函数
内部用swap函数,前后指针逼近中位
54.替换数字
resize函数(内部放迭代器,左闭右开)
写指针从新字符串后往前
读指针从旧字符串后往前
151.翻转字符串里的单词
要求:去掉头尾多余空格,保留中间空格,单词内部顺序保持,外部顺序颠倒
链表
206.反转链表
前指针指向链表前一个元素,后指针指向链表当前元素,用tmp保留后一个元素
19.删除链表的倒数第n个元素
快指针先走n步,慢指针随后跟上,移动速度一样
160.链表相交
双指针,一个指针对一个链表,先对齐长度,然后以相同移动速度移动,比较指针
142.环形链表
数学方法
注意while循环的跳出条件
快指针(配速2)要先进入圈,开始绕起来,在慢指针(配速1)第一次进入环时相遇
Nsum问题
Nsum问题要注意问题的细微变化
强调:索引和结果集均不重复,去重是关键
15.三数之和
三叔之和定一动二(后续四数之和定二动二)
先排序
循环内部:
【1. 特判
2. 去重 】定指针部分
3. 指针逼近(去重)
18. 四数之和
定二动二
先排序
【1. 特判
2. 去重 】
【1. 特判
2. 去重 】 两次(定二)
3. 指针逼近(去重)