博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Floyd判圈算法
阅读量:4449 次
发布时间:2019-06-07

本文共 807 字,大约阅读时间需要 2 分钟。

  • 用途:判断和求得一个循环数列的循环节

  • 大致流程:

    两人在如图的跑道赛跑

    

    第一个人跑得慢,每次前进一步;第二个人快,每次前进两步

    由于跑道性质,第二个先进入环状跑道后一直循环,直到遇到第一个人把他“追上”

    由此就找到了循环节

    通过证明可以发现第二个人只比第一个人多跑一圈

  • 所以这个算法的优点在于: 空间上不用储存每一步具体的值 将空间复杂度降到O(1)

  • 具体证明看这里:     

 

例题: UVA11549

1 #include
2 #define ll long long 3 using namespace std; 4 int n,k; 5 int b[200]; 6 int nxt(int n,int k) 7 { 8 if(!k) return 0; 9 ll k2=(ll)k*k;10 int l=0;11 while(k2>0)12 {13 b[l++]=k2%10; k2/=10;14 }15 if(n>l) n=l;16 int ans=0;17 for(int i=0;i
ans)34 ans=k2;35 k2=nxt(n,k2);//第二步 36 if(k2>ans)37 ans=k2;38 }while(k1!=k2);39 printf("%d\n",ans);40 }41 return 0;42 }
哼唧

 

转载于:https://www.cnblogs.com/kylara/p/9879501.html

你可能感兴趣的文章
node.js系列(实例):原生node.js实现接收前台post请求提交数据
查看>>
SignalR主动通知订阅者示例
查看>>
golang的表格驱动测试
查看>>
用python实现矩阵转置
查看>>
linux 小技巧(磁盘空间搜索)
查看>>
iOS开发——捕获崩溃信息
查看>>
(for 循环)编程找出四位整数 abcd 中满足 (ab+cd)(ab+cd)=abcd 的数
查看>>
js 基础
查看>>
tomcat使用spring-loaded实现应用热部署
查看>>
boost1.53中的lock-free
查看>>
链表_leetcode203
查看>>
hdu4746:2013杭州网络赛I 莫比乌斯反演
查看>>
ubuntu linux下火狐跨版本升级方法详解(也同样适合linux下安装火狐中国版)
查看>>
基于ajax 的 几个例子 session ,ajax 实现登录,验证码 ,实现ajax表单展示
查看>>
OSX: 10.9的SMB网络共享连接可能破坏其权限设置
查看>>
连接不上sql server服务器的解决方案
查看>>
《鬼谷子的局5》—— 读后总结
查看>>
记录安装oracle的那些事(二)之双系统安装
查看>>
c3po数据库连接池中取出连接
查看>>
bootstrap-table 分页
查看>>