Golang leetcode142 环形链表 暴力map 快慢指针法

文章目录

  • 环形链表 leetcode142
    • 暴力遍历 map哈希记录
    • 快慢指针法

环形链表 leetcode142

该题目要求找到入环的第一个节点
我们可以通过map进行记录,没到新的节点查询是否经过原有节点
入环节点,上两个节点的next相同
若有入环节点,则一定能检测到;若没有,则总会到达最后节点

暴力遍历 map哈希记录

// 暴力遍历 map哈希表记录
func detectCycle(head *ListNode) *ListNode {dummyHead := &ListNode{Next: head}table := map[*ListNode]int{}//若不成环,会走出循环for dummyHead.Next != nil {if _, ok := table[dummyHead.Next]; ok {return dummyHead.Next}table[dummyHead.Next] = 1dummyHead = dummyHead.Next}return nil
}

时间、空间复杂度都为O(n)

快慢指针法

思路解析

  1. 什么如果成环,快指针一定会再慢指针没有转完一圈之前追上满指针?

    1. 由于快指针的移动速度为2,慢指针的移动速度为1, 二者相对速度为1
      所以当快指针跟在慢指针后面时有以下几种情况

      • 快指针落后2 -> 快指针落后1 ->重合
      • 快指针落后1 ->** 重合**
      • 快指针与慢指针重合
        所以说只要快指针从后面追上慢指针,一定重合
    2. 最极端的情况:刚进入节点时,慢指针此时在相交节点上,快指针在慢指针前面一个
      在这里插入图片描述

      • 我们设到相遇所需的步数为x环长为n
      • 当相遇时,应该两个指针走过的节点数相同
      • 快指针由于是转了一圈再追上慢指针,其长度计算前去圈长
      • 快指针初始+1,LENfast=2x+1-n
      • 慢指针长度LENslow=x
      • 二者相同时,2x+1-n=x -> x=n-1
        也就是说即使在最极端的情况下也能在慢指针还没走完第一圈,到倒数第一个节点时与快指针相遇
  2. 得到二者一定相遇时,我们如何确定到底哪个节点是入环节点?
    在这里插入图片描述

    • 到相遇时,快指针走过的总距离F=a+n(b+c)+b ,n为快指针转过的圈数
    • 慢指针走过的距离S=a+b
    • 此时S=F,即a+n(b+c)+c=a+b -> a=(n-1)(b+c)+c
    • 通过这个方程我们可以看出来初始节点距离相交节点的距离为 n-1圈 圈长加c,而相遇节点距相交节点的距离为c
    • 所以从相遇节点和初始节点各出一个指针,总会在慢指针走完n-1圈在走玩c后在相交节点相遇
      在这里插入图片描述
// 双指针法 快慢指针
func detectCycle(head *ListNode) *ListNode {
fast, slow := head, head
//若有相交节点,则快慢指针一定会相遇
for fast != nil && slow != nil {
slow = slow.Next//防止fast指针超出链表限制
if fast.Next == nil {
return nil
}fast = fast.Next.Next//从相遇节点开始寻找相交节点
if fast == slow {
//题目要求不修改链表
p := head
for p != slow {
slow = slow.Next
p = p.Next
}return p}
}
return nil
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用python实现一个简单的单向链表?

实现一个简单的单向链表涉及两个基本的构建块:节点(Node)和链表(LinkedList)。下面是详细步骤和解释: 1. 实现节点(Node) 链表中的每个节点通常包含两部分:存储的数据&…

Flutter 图片和资源的高效使用指南

文章目录 指定资源什么是 [pubspec.yaml](https://dart.cn/tools/pub/pubspec) 文件 图片图片常用的配置属性加载本地图片通过 pubspec.yml 文件进行配置图片目录使用 Image.asset 小部件加载本地图片 加载网络图片通过 Image.network小部件加载网络图片:使用Image.…

LeCode:(606. 根据二叉树创建字符串)

题目链接 本体的难点: 什么时候去打印左右括号?什么时候省略? 解题过程:通过观察看到,每次遍历结点之前,打印了一个左括号;遍历到叶子,叶子的左右也要打印出括号来(先…

linux虚拟机环境快速搭建redis5.x版本的主从集群总结

原创/朱季谦 我在阿里云服务器上曾参与过公司redis集群的搭建,但时间久了,都快忘记当时的搭建过程了,故而决定在虚拟机centOS 7的环境,自行搭建一套redis5.x版本的集群,该版本集群的搭建比较方便,不用再像…

实现电子邮件自动化的实用技巧与指南

如何实现电子邮件自动化?一般可以通过规则和过滤器、自动回复、定时发送、快捷键和模板、团队邮箱等方法来实现。 一、什么是电子邮件自动化 电子邮件自动化是一种根据特定条件在适当时机发送正确信息的过程。这些条件可以是时间表、触发器或在您的电子邮件自动化工…

AVL树介绍以及代码实现

二叉搜索树的查找和删除虽然最优情况下能够做到 O(logN) 的级别,但是在一些特殊情况下,它的查找速度只能到达 O(N)级别,比如数据按顺序插入,那么就一定是一棵单边树。 为了针对这种情况,俄罗斯的两位数学家&#xff1a…

android 倒计时控件

效果:(可不设置 之前、之后文字) /*** 倒计时秒数** desc : 时分秒倒计时view* * 布局里引用后,* private fun testMethod(){* binding.test.setCDownStarText("之前的文字")* binding.test.setCDo…

在数据库造数据发现的bug也是bug

上个月,我和开发小哥讨论过一个问题,开发小哥专门提醒我,页面上新增功能尽可能在前端造一些数据去测试,如果直接从数据库里插入的数据,定位问题还是有些说不清楚。 讨论的过程和细节就是以下的对话内容: …

【Sublime Text】| 02——常用插件安装及配置

系列文章目录 【Sublime Text】| 01——下载软件安装并注册 【Sublime Text】| 02——常用插件安装及配置 失败了也挺可爱,成功了就超帅。 文章目录 1. 汉化2. 更换颜色主题3. 更改编码插件—ConvertToUTF84. 对齐插件—Alignment5. 括号高亮插件—BracketHighligh…

网络嗅探器的设计与实现(2024)-转载

1.题目描述 参照 raw socket 编程例子,设计一个可以监视网络的状态、数据流动情况以及网络上传输 的信息的网络嗅探器。 2.运行结果 3.导入程序需要的库 请参考下面链接: 导入WinPcap到Clion (2024)-CSDN博客 4.参考代码 #define HAVE_REMOTE #define LINE_LEN …

XSKY SDS 产品率先获得 OceanBase V4 新版本认证

近日,北京奥星贝斯科技有限公司(简称:OceanBase)与北京星辰天合科技股份有限公司(简称:XSKY 星辰天合)顺利完成产品兼容性认证。 XSKY 的高性能全闪存储以及混闪存储,与 OceanBase V…

ELement UI时间控件el-date-picker误差8小时解决办法

一、问题描述&#xff1a; 在项目中引用了elementui中的date-picker组件&#xff0c;选中的时间跟实际相差八小时&#xff0c;且格式不是自己想要的格式 <el-date-pickertype"date"placeholder"选择日期"format"yyyy/M/d"v-model"form…

Java面试之集合篇

前言 本篇主要总结JAVA面试中关于集合相关的高频面试题。本篇的面试题基于网络整理以及自己的总结编辑。在不断的完善补充哦。欢迎小伙伴们在评论区发表留言哦&#xff01; 1、基础 1.1、Java 集合框架有哪些&#xff1f; Java 集合框架&#xff0c;大家可以看看 《Java 集…

报错处理:java.io.IOException: Could not find resource mybatis-config.xml

运行mybatis文件时出现了以下的情况 java.io.IOException: Could not find resource mybatis-config.xmlat org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:114)at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:100)at org.apach…

对html骨架的详细解释

html的骨架结构 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head…

BRF文件数据结构

一.BRF-文件头数据结构 type_mesh "mesh" 网格 type_material "material" 材质struct brf_header{int type_length; //4个字节, type字符串对应长度char* type_name; //根据type_length获取int type_content_num; //4个字节,对应类型所含个数,例如含有模…

1982-2022年GIMMS 标准化差异植被指数

GIMMS 标准化差异植被指数 1982-2022 PKU GIMMS 归一化植被指数数据集&#xff08;PKU GIMMS NDVI&#xff0c;版本 1.2&#xff09;提供了从 1982 年到 2022 年以半个月为间隔、分辨率为 1/12 的一致的全球 NDVI 数据。其主要目标是解决现有领域中普遍存在的关键不确定性。全…

12.27

吓死了&#xff0c;WPS的协作模式&#xff0c;以为白做了&#xff0c;吓得额头冒冷汗

对于网关的理解-Gateway

因为在使用微服务的时候&#xff0c;会有多端请求。会产生以下问题&#xff1a; 1.客户端需要记住每一个微服务的url 2.主机端口也会直接暴露 3.每一个微服务都需要认证 4.存在跨域问题 所以网关可以解决统一访问、隐藏真实的服务器地址、网关进行统一认证、解决跨域问题、…

【算法笔记】状态机dp

状态机dp概述 当一个事件涉及的过程的考虑并且方案数的考虑比较繁琐时&#xff0c;我们可以尝试用状态机的思想去考虑这个问题&#xff0c;将这个问题简化&#xff0c;就是去考虑一个对象他所具有的几种状态。 状态机主要考虑一下两个方面&#xff1a;状态和转移 状态其实也…