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

flash做的小动画视频网站/怎么做手工

flash做的小动画视频网站,怎么做手工,国内做游戏破解的网站,做网站 源代码更多好文 v golang技术实验室 给定链表,判断链表是否有环及环的位置 如下 第一种-时间判断 给懂时间1s或者0.5s,来判定是否循环完毕。 此方法会有误差,如果链表足够长,并且没有环,而超过时间就会认定是有环 第二种…

更多好文
v
golang技术实验室

给定链表,判断链表是否有环及环的位置
如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VP8ttPm8-1625816200798)(readme.assets/image-20210706104315663.png)]

第一种-时间判断

给懂时间1s或者0.5s,来判定是否循环完毕。

此方法会有误差,如果链表足够长,并且没有环,而超过时间就会认定是有环

第二种-set查重

设置map集合,将每次循环的链表元素地址存储在map中,当出现在map中存在的情况时候,就是存在环,而且能找出环的入口

//-- ----------------------------
//--> @Description 链表是否有环 及环的入口
//--> @Param
//--> @return
//-- ----------------------------
func isRingSet(head *nodeList)*nodeList{var Map = make(map[string]struct{})cur := headfor cur != nil && cur.Next != nil{if _ ,ok := Map[fmt.Sprintf("%p",cur)];ok{return cur}Map[fmt.Sprintf("%p",cur)] = struct{}{}cur = cur.Next}return nil
}

第三种-快慢指针

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iflttvgh-1625816200800)(readme.assets/image-20210706140852681.png)]

第一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hTHF3Fre-1625816200802)(readme.assets/image-20210706140910943.png)]

指定快慢指针,slow步幅为1,fast步幅为2

第1次移动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l8RlxbdN-1625816200804)(readme.assets/image-20210706141019772.png)]

第二次移动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OtFUSfQV-1625816200805)(readme.assets/image-20210706141040453.png)]

第三次移动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJ5IovIs-1625816200806)(readme.assets/image-20210706141101223.png)]

此时fast已经进入第二圈

第四次移动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6wI8BFeo-1625816200807)(readme.assets/image-20210706141118452.png)]

此时fast和slow相遇,说明存在环

代码

//-- ----------------------------
//--> @Description 链表是否有环
//--> @Param
//--> @return
//-- ----------------------------
func isRingCycle(head *nodeList)*nodeList{slow , fast := head,headfor  slow != nil  && fast != nil && fast.Next != nil{slow = slow.Nextfast = fast.Next.Nextif slow == fast{return slow}}return nil
}
slow &{2 0xc00008e200}
fast &{3 0xc00008e210}
slow &{3 0xc00008e210}
fast &{5 0xc00008e230}
{4 0xc00008e220}

环入口位置的确定

第一种

我们可以用hashset的方式,既能确定是否有环,能确定环的入口

第二种

快慢指针

快指针fast和慢指针slow从头开始出发,快指针每次走2步,慢指针每次走1步,当第一次相遇的时候,快指针从头出发,每次走一步,再次相遇的时候就是环的入口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IGDhceZ5-1625816200807)(readme.assets/image-20210709144019404.png)]

/**
快慢指针判断环的入口fast = 2,slow = 1 当第一次相遇时候,快指针从起点走,
慢指针正常前行,当第二次相遇的时候就是环的入口*/
func loopCycle(head *nodeList)*nodeList{slow,fast := head,headfor slow != nil && fast.Next != nil{slow = slow.Nextfast = fast.Next.Nextif slow == fast{break}}fast = headfor  slow != nil && fast != nil && fast.Next != nil{fast = fast.Nextslow = slow.Nextif fast == slow{return slow}}return nil
}

我们来论证一下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sXnRn7vM-1625816200808)(readme.assets/image-20210709144703903.png)]

假设头节点到环入口的举例为x,环入口到第一次相遇的举例为y,第一次相遇到环入口的位置为z,
则slow走的举例为x+y,而fast走的距离为x+y +n(y+z),也就是fast在环中走了n圈(n>=0),因为
fast每次走2步,slow走一步,所以fast是slow的2倍

2(x+y) = x+y +n(y+z)
x = n(y+z)-y
x=(n-1)(y+z)+z

y+z是环的长度

有两种情况:

n=1 时,x=z,此时我们将 fast 放到链表头,然后 fast 和 slow 每次走一步,相遇节点就是环的入口;
n>1 时,我们将 fast 放到链表头,当 fast 和 slow 相遇时,说明 slow 在环里转了 n-1 圈后又走了z步,等价于 n=1 的情况。

更多好文
v
golang技术实验室

http://www.lbrq.cn/news/739135.html

相关文章:

  • php不用框架怎么做网站/制作网站要多少费用
  • 东莞网站建设有什么网络公司/厦门百度推广排名优化
  • 公司网站制作内容/制作一个网站的费用是多少
  • 深圳国税局网站怎么做票种核定/大庆建站公司
  • 企业官网门户网站管理系统/保定百度seo公司
  • 设计类专业介绍/seo推广优化培训
  • 蒙阴建设局网站/网络推广引流有哪些渠道
  • 上海门户网站制/合肥seo整站优化
  • 不懂英文怎么做英文的seo网站/鄞州seo服务
  • 电脑网页打不开怎么解决/关键词快速优化排名软件
  • dw做旅游网站毕业设计模板下载/网站快速建站
  • 怎么看网站开发语言/免费python在线网站
  • 加强县政府网站建设的几点建议/软件排名优化
  • 淘宝店招免费做的网站有/网站做优化好还是推广好
  • 网页的响应式布局/免费关键词优化工具
  • 网站宽屏背景/seo网络营销外包
  • 制作图片的软件叫什么/徐州seo招聘
  • 广州外贸网站设计/传媒网站
  • 央企 网站建设 公司/推广网络营销外包公司
  • 有什么做服装的网站/暴风seo论坛
  • wordpress windows伪静态/杭州seo靠谱
  • 外国优秀网站设计/二次感染即将大爆发
  • 欧美做爰视频网站/海南百度推广总代理
  • 网站及微信建设是否涉及知识产权/品牌推广方案
  • 网站推广常用方法/广告策划公司
  • 网站建设需要做的事情/谷歌广告代理公司
  • 网站营销公司哪家好/企业如何进行搜索引擎优化
  • 网站建设邀标比选/宁波网站建设推广公司价格
  • 深圳服务平台网站/手机端网站优化
  • 合肥网站建设制作/收录入口在线提交
  • Android APP防止应用被动态调试
  • 国产化PDF处理控件Spire.PDF教程:如何使用 Python 添加水印到 PDF
  • 力扣 hot100 Day79
  • 开源大模型如何选择?GPT-OSS综合评估
  • flink+clinkhouse安装部署
  • 决策树学习报告