前言
文章的刷题顺序按照代码随想录中给出的力扣题目顺序 代码随想录
双指针相关的题,在之前的文章中都有提到,并且每个题都有其他解法,这里就不详细列出每个题所有方法的实现,只对于双指针的解法进行总结(每题对应的文章链接会在下面给出)
其他文章链接:刷算法Leetcode文章汇总
双指针篇
27.移除元素(对应: 刷算法Leetcode---1(数组篇))
左指针遇到要移除的元素就与右指针交换,注意左指针要重新判断
344.反转字符串(对应:刷算法Leetcode---4(字符串篇))
左右指针交换
151.反转字符串中单词(对应:刷算法Leetcode---4(字符串篇))
左右指针确定每个单词的位置
206.反转链表(对应:刷算法Leetcode---2(链表篇))
三指针,前两个进行反转,最后一个记录下一个节点
19.删除链表的倒数第N个节点(对应:刷算法Leetcode---2(链表篇))
快慢指针,快指针先走n+1步(根据具体判断条件设计而不同)
面试题 02.07. 链表相交(对应:刷算法Leetcode---2(链表篇))
双指针分别从两个头节点开始,到链表尾部后分别从另一个头节点开始,直至相交
142.环形链表Ⅱ(对应:刷算法Leetcode---2(链表篇))
快慢指针,快指针每次走两个节点,慢指针走一个节点,快慢指针相遇则代表有环。再分别从相遇点和头节点开始移动,再次相遇则为环入口(理论推导见另一文章)
15.三数之和(对应: 刷算法Leetcode---3(哈希表篇))
排序+双指针,在第一个数确定的情况下,使用双指针找另外两个数(剪枝见另一文章)
18.四数之和(对应: 刷算法Leetcode---3(哈希表篇))
排序+双指针,与三数之和类似,先确定前两个数,使用双指针找后两个数(剪枝见另一文章)
双指针总结
①数组:
二分查找;
指定元素交换位置(题27)、快排;
数组反转;
有序数组查找目标和的两个数(题15、18)
②链表:
反转链表(题206);
寻找倒数个节点(题19);
相交链表(面试题02.07);
环形链表(题142)
③字符串:
字符串反转(题344);
字符串中单词反转(题151)