快慢指针

1.快慢指针

 快慢指针是指两个移动速度不同的指针,一个指针移动的步长大于另一个指针(多为2倍关系)。

2.快慢指针应用
  1. 判断单链表是否为循环链表(寻找回路入口)
  2. 在有序链表中寻找中位数
3.快慢指针寻找回路入口 LEETCODE287
3.1有环必相遇

 当慢指针到环里的时候,快指针已经在环里了,一快一慢肯定会相遇。

3.2寻找入环口:

结论:
 当快慢指针相遇时,将快指针指向链表的起点,且步长与慢指针一样为速度为1,则慢指针与快指针相遇的地方就是环的入口。
原理
 设环长:c,起点到环入口:x,起点到相遇点:y,相遇点到起点:z,V(快)=2* V(慢);
 相遇时快指针在环上跑了m圈,慢指针为n圈;
 L(快)=x+y+m* c;
 L(慢)=x+y+n* c;
 由V(快)=2* V(慢)知:L(快)=2* L(慢);
 =>2*(x+y+nc)=x+y+mc;
 =>x=-y+(m-2n)*c=c-y+(m-2n-1)*c=z+(m-2n-1)*c;
 假设此时快慢指针速度都为1,当快指针从初试位置开始跑过(m-2n-1) *c距离是,此时距入口处距离为z,而慢指针跑完(m-2n-1)*c(相当于(m-2n-1)圈)时在原位置即相遇位置,距入口处也为z。易知继续跑下去两指针会在入口处相遇。

4.快慢指针寻找寻找中位数 LEETCODE876

 快指针的移动速度是慢指针移动速度的2倍,因此当快指针到达链表尾时,慢指针到达中点。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值