Floyd cycle算法
问题:对一个链表,判断是否有环。存在环时,求出环的起始位置及环长度
使用快慢指针
1、判断是否有环,快指针移动两步,慢指针每次移动一步,看快慢指针是否会相遇
2、环的起始位置
如上图所示,假设快慢指针相遇点为离环起始位置 b,快指针移动距离为a+(b+c)n+b,慢指针移动距离为a+b,则有a+(b+c)*n+b=2(a+b) => a = (n-1)(b+c) + c。为什么慢指针在第一圈时就相遇?因为假设在环起始位置时,环长度为L,快指针在环上位置为b',慢指针经过c'相遇,则有c' mod L= (b' + 2c') mod L => c' + nL = b' + 2c' =>c' = nL - b' 当n=1时,c' = L - b'
在求环的起始位置时,将慢指针重置为链表的首位置,快慢指针每次前进一步,直到慢快指针相遇,此时相遇位置即为环的起始位置。
3、环的长度。在求得环的起始位置后,计数重置为0,慢指针每次前进一步,计数加1,直到慢指针等于快指针。此时计数值就是环的长度
Floyd cycle算法相关推荐
- 【算法】弗洛伊德(Floyd)算法
这个算法主要要弄懂三个循环的顺序关系. 弗洛伊德(Floyd)算法过程: 1.用D[v][w]记录每一对顶点的最短距离. 2.依次扫描每一个点,并以其为基点再遍历所有每一对顶点D[][]的值,看看是否 ...
- LeetCode Linked List Cycle II(floyd cycle)
问题:给出一个链表,可能存在环,要求输出环的起点位置 思路:使用Floyd cycle algorithm 具体代码参考: https://github.com/wuli2496/OJ/tree/ma ...
- C++floyd warshall算法求最短路径(附完整源码)
C++floyd warshall算法求最短路径 floyd warshall算法求最短路径的完整源码(定义,实现,main函数测试) floyd warshall算法求最短路径的完整源码(定义,实现 ...
- Floyd Warshall算法
Description: 描述: This is a very popular interview problem to find all pair shortest paths in any gra ...
- 七、最短路径——弗洛伊德(Floyd)算法
为了能讲明白弗洛伊德(Floyd)算法的精妙所在,我们先来看最简单的案例.下图是一个最简单的3个顶点连通网图. 我们先定义两个二维数组D[3][3]和P[3][3],D代表顶点到顶点的最短路径权值和的 ...
- 【数据结构】图—弗洛伊德(Floyd)算法
前言 上文介绍了迪杰斯特拉(Dijkstra)算法,计算网图的某个源点到其余各个顶点的最短路径问题(边权值为非负值),本文介绍另一个求最短路径的算法--弗洛伊德算法,它是计算所有顶点到所有顶点的最短路 ...
- 弗洛伊德(Floyd)算法之两点之间的最短距离问题
1.概述 (1)与迪杰斯特拉(Dijkstra)算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法,该算法 名称以创始人之一.1978 年图灵奖获得者.斯坦福大学计 ...
- 【Floyd最短路径算法】--python实现
目录 1.Floyd是干嘛的 2.基本思想 3.代码如下 4.逆推到起点 代码如下 5.完整代码 1.Floyd是干嘛的 该算法也称为Floyd算法,Roy-Warshall算法,Roy-Floyd算 ...
- 数据结构——图——弗洛伊德(Floyd)算法
数据结构--图--弗洛伊德(Floyd)算法 为了能讲明白弗洛伊德(Flbyd)算法的精妙所在,我们先来看最简单的案例.图7-7-12的左图是一个最简单的3个顶点连通网图. 我们先定义两个二维数组D[ ...
最新文章
- 两个点 定位_深圳Mark点定位的一般原理与步骤
- 高手进阶:/etc/profile环境变量配置解析
- pythonsys标准_python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出...
- python关于字符串下面说法错误的是_关于字符串下列说法错误的是
- FLEX XMLLIST 详解
- 如何在一台没有网的电脑上安装anaconda_简述验证Anaconda是否安装成功的两种方式...
- Vi编辑器的基本使用方法及vi和Vim的区别【ZT】
- 用Scala实现简单的Web和API服务器
- HttpClient如何解决302重定向问题
- java过滤器流程_DRF filter 过滤器实现流程
- 老板口中的一区二区是什么意思?
- ucgui界面 vc_【MM32F103试用体验】ucGUI + FreeRTOS +触摸屏图形界面开发
- 在线词云工具Tagxedo的使用
- 2019-09-11想念艾青,想念《大堰河——我的保姆》
- 联想一体机用u盘装linux教程,联想一体机如何用u盘装系统
- 在微信小程序中制作的登录功能一定要考虑不同的入口问题
- Image To PDF or XPS V4.2 汉化版,tek2y原创汉化!
- Java:Windows 10下载和配置JDK
- 《软技能——代码之外的生存指南》读书笔记之职业(一)
- 腾讯物联TencentOS tiny上云初探
热门文章
- bundle 的生成和使用
- (笔记)Mysql命令select from:查询表中的数据(记录)
- 基于MIPS架构的BackTrace实现
- python语言是编译型语言-Python程序的执行过程原理(解释型语言和编译型语言)...
- python是一种什么类型的编程语言-Python这么火,为什么说它不是未来的编程语言?...
- 全国青少年软件编程python等级考试-全国青少年软件编程等级考试:Python一级考试大纲...
- 小学生python入门-极度舒适的全套 Python 入门教程,小学生看了也能学会
- python操作系统-Python_操作系统的发展史
- python官网怎么下载-python下载官网
- 手机上开发python有哪些软件-哪个手机软件有python题库