当前位置: 首页 > news >正文

做网站建设工资高吗百度指数的功能

做网站建设工资高吗,百度指数的功能,今天广西疫情最新消息,自己做的网站怎么被搜录弗洛伊德( 罗伯特・弗洛伊德)判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,以及判断环的起点与长度的算法。昨晚刷到一个视频&…

弗洛伊德( 罗伯特・弗洛伊德)判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,以及判断环的起点与长度的算法。

昨晚刷到一个视频,来自油管的Joma Tech,视频本身挺有意思的,当然这哥们也很有意思,经常在油管发视频然后在FB就被辞职了,现就职于谷歌。

里面介绍了如何实现下面这个的算法,主要是视频内容很有意思,当然这里还是介绍里面出现的几个算法。

题目:找出数组中的重复数字,数组里只有一个重复的数字,可以重复多次。其中算法的要求是时间复杂度小于O(n²),空间复杂度是O(1)

题目是很简单,求解的办法也很多,有直接循环查找,为了提高效率还可以使用二分查找,视频中的前两个方法如下:

排序之后,相邻元素如果是相等即为重复数字。但运行的时间复杂度高,比较耗时。不能通过!

def findDuplicate1(nums):nums.sort()for i in range(1,len(nums)):if nums[i]==nums[i-1]:return nums[i]arr1=[1,3,4,2,2]
arr2=[8,1,3,4,2,4,5,4]print(findDuplicate1(arr1))#2
print(findDuplicate1(arr2))#4

使用字典或set来保存遍历数组里的值,然后判断是否已添加,如果有添加就说明是重复数值了。

这个虽然相较于上面的方法,时间缩短了,但是空间复杂度上来了,比较耗内存。不能通过!

def findDuplicate2(nums):seen={}for num in nums:if num in seen:return numseen[num]=Trueprint(findDuplicate2(arr1))#2
print(findDuplicate2(arr2))#4#或者set()也可以
def findDuplicate2_(nums):seen=set()for num in nums:if num in seen:return numseen.add(num)
print(findDuplicate2_(arr1))#2
print(findDuplicate2_(arr2))#4

接下来看下符合要求的算法,也就是下面介绍的龟兔算法。

当然这个题目还有一个限定条件,给定一个包含n + 1个整数的数组nums,其中每个整数都在1到n之间(包括),不然我给出的示例就会出现索引越界了,这样就可以使用这个龟兔赛跑的算法,也有人管叫快慢指针,有重复就形成闭环:

def findDuplicate_ok(nums):tortoise=nums[0]hare=nums[0]while True:tortoise=nums[tortoise]#龟hare=nums[nums[hare]]#兔if tortoise==hare:breakptr1=nums[0]ptr2=tortoisewhile ptr1!=ptr2:ptr1=nums[ptr1]ptr2=nums[ptr2]return ptr1arr1=[1,3,4,2,2]
arr3=[1,4,6,8,2,3,8,5,7]
print(findDuplicate_ok(arr1))#2
print(findDuplicate_ok(arr3))#8

时间复杂度:O(n),空间复杂度:O(1)

当然如果是初学者,会感觉到有点复杂,没关系,我们可以在龟(或兔或两者)的位置设置断点,然后步进,一步一步的看整个算法的执行流程就明白了,这个也是大家在需要进行调试或者了解一些变量的变化的最常见有效的方法。

不便调试的,我也将整个执行过程贴出来,方便观察:

数组:nums=[1,4,6,8,2,3,8,5,7]

第1次

第2次

第3次

第4次

第5次

nums[0]=1

nums[1]=4

nums[4]=2

nums[2]=6

nums[6]=8

nums[0]=1

nums[nums[1]]=2

nums[nums[2]]=8

nums[7]=5

nums[3]=8

当迭代到第5次的时候,两者相等了,于是就跳出循环,然后就通过指针找出重复的值

ptr1=1

nums[1]=4

nums[4]=2

nums[2]=6

nums[6]=8

ptr2=8

nums[8]=7

nums[7]=5

nums[5]=3

nums[3]=8

http://www.shuangfujiaoyu.com/news/53976.html

相关文章:

  • 动态网站设计的目的营销网络
  • 邢台做网站推广费用靠网络营销火起来的企业
  • 网站建设的基本内容社区营销推广活动方案
  • 高唐建筑公司网站怎么搞自己的网站
  • 网站建设的需求搜索引擎优化方法包括
  • 那些网站专门做棋牌推广的网站优化培训班
  • 福州公司网站设计百度网址大全 官网首页
  • 青苹果网站建设公司网站设计
  • 动态网站开发服务器网页版百度云
  • 做mip网站需要多钱网站seo源码
  • 网站备案 视频优化大师免费版下载
  • 网站空间数据太原seo关键词排名
  • 响应式网站企业百度地图导航2022最新版
  • 怎样自己做商场网站网站平台有哪些
  • 互联网网站制作公司哪家好今日国内新闻重大事件
  • iis部署wordpress二十条优化疫情措施
  • pc建站今日新闻头条大事
  • 天津做网站都找津坤科技seo技术团队
  • 做网站网页外链代发2分一条
  • 萝岗免费网站建设南京谷歌seo
  • 北京企业网站建设推荐网站排行榜查询
  • 网站图片移动怎么做中国最新领导班子
  • 室内设计招标网站企业网站优化排名
  • 做跨境电商要什么费用河南seo快速排名
  • 网站开发类的合同如何让自己的网站快速被百度收录
  • 怎么用新浪云做淘宝客网站网络营销推广方案范文
  • 电商网站建设的核心是什么电商seo搜索优化
  • 网站建设合同审查注意事项如何做电商
  • 金融类网站开发百度经验官网
  • SFDA的网站建设怎样注册自己网站的域名