双指针技巧总结--力扣 141.环形链表 142.环形链表II 167.两数之和 II - 输入有序数组 344.反转字符串 19.删除链表倒数第 N 个元素 876. 链表的中间结点
双指针技巧总结
参考:https://labuladong.gitee.io/algo/2/21/53/ -- labuladong 的算法小抄
快慢指针
主要解决链表中的问题,比如典型的判定链表中是否包含环
1、判定链表中是否含有环
力扣141. 环形链表
经典解法就是用两个指针,一个跑得快,一个跑得慢。如果不含有环,跑得快的那个指针最终会遇到 null
,说明链表不含环;如果含有环,快指针最终会超慢指针一圈,和慢指针相遇,说明链表含有环。
注意 fast.next!=null, 因为fast要为next.next
方法2: 可以用hash表的方式,访问过的放在hash表里。
Set<ListNode> seen = new HashSet<ListNode>();
力扣142-环形链表找节点
证明:
证明过程:b为环节点数,a为非环节点数。f为快指针步数,s为慢指针步数,快2慢1,f=2s,f=s+nb,n为圈数。快慢第一次相遇时,有2s=s+nb,推出s=nb(即多走的为b的n倍)。
又到环节的的步数 k = a+nb 一定成立。此时s已经在nb了,再走a步就是k点了,重置快指针/慢指针为head(都行的),此时快指针一步一步走,走a步,一定也会到k点,因此,此时快慢第二次相遇,一定是k点。
易错点:循环判断条件中不要进行fast == slow的判断,因为两者都是从head出发,就会达到退出循环的条件,应该把判断相等放在循环中 --可用do while
如何判断环的长度:找到头节点后,再走一遍
三处错误
寻找链表的中点--力扣876
快指针到终点,慢指针到达中间。
注意:当链表的长度是奇数时,slow恰巧停在中点位置;如果长度是偶数,slow 最终的位置是中间偏右:
寻找链表中点的一个重要作用是对链表进行归并排序
两种简单的方法:一个是放到数组里面,一个是遍历两次
力扣19--寻找链表的倒数第 n个元素
思想: 前一个指针先走n步,然后一起走,这样快的到了根节点慢的就是倒数n,注意此时要快节点走到null前一个停止,便于删除
注意点: 要注意只有一个节点的情况考虑删除第一个节点时的情形,直接返回head.next
技巧:可以使用dummy节点,该节点指向头节点,返回时也可以返回dummy.next
也可以用栈, 递归的方法也很巧妙,算长度时倒数第n个
左右指针
后者主要解决数组(或者字符串)中的问题,比如二分查找
1、二分查找,再具体看
2、力扣167-两数之和
两个地方出错
其他方法:二分查找
补充:
1、
给你一个array [1, 9, 134 , 10, 25 , 40, 4, 7],
给一个target,返回所有 A+B=target 的 (paire 对) 上面比如是target = 11 , 返回 [(1, 10), (4, 7)], 每个元素只能用一次 腾讯面试,167题的变形,同时说出时间复杂度和空间复杂度
感觉还是这个题的思路吧,唯一不同的是sum = target后不结束,而是双指针同时移动,继续遍历直到L,可以先排序?
2、
稍微变形,与target差距最小的两数
3、反转数组--力扣344
简单题
4、滑动窗口算法
__EOF__

本文链接:https://www.cnblogs.com/Blunt-Raz0r/p/15507432.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~