环形列表 题目分析

news2024/11/19 2:31:34

一、题目链接:. - 力扣(LeetCode)

二、思路

1.使用快慢指针,快指针一次走两步,慢指针一次走一步,二者相对速度为1

2.当慢指针刚好进入环时,设二者的相对距离为N

3.如果链表中存在环,快指针就会追上慢指针。快慢指针就会相遇。

4.设环的结点数量为C

三、代码

bool hasCycle(struct ListNode *head) {
    struct ListNode*fast=head;
    struct ListNode*slow=head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;
        if(fast==slow)
        return true;
    }
    return false;

}

因为快指针一次性走两步,所以要对fast  和   fast->next  进行判断是否为NULL。

fast  指针 一次走两步,slow  一次性走 一步,二者相对速度为1,所以,fast 一定能追上 slow。二者在有环存在的情况下,一定能相遇。

四、思考(如果fast一次性走3步能否成功)

fast  指针 一次走3步,slow  一次性走 1步二者相对速度为2,所以,fast 一定能追上 slow。二者在有环存在的情况下,可能遇见,也可能错过。

1.二者的相对距离N为偶数时,

N%2==0,说明二者一定能遇见,说明fast一次走3步能成立。

2.二者的相对距离N为奇数时,

N%2==1,说明二者距离减到 1时,没有遇见,距离再次减2,距离为-1.  第一轮无法相遇

这时,快慢指针的距离为C-1

(1)当C为偶数时(C-1为奇数)

这时二者的相对距离C-1为奇数,(C-1)%2==1.

可以说明 :

说明二者距离减到 1时,没有遇见,距离再次减2,距离为-1.  第一轮无法相遇

这时,快慢指针的距离为C-1,一直陷入死循环,无法成功

(2)当C为奇数时(C-1为偶数)

这时二者的相对距离C-1为偶数,(C-1)%2==0.

可以说明 ,在第二轮的时候, 二者一定能遇见,说明fast一次走3步能成立

3.逻辑总结:

当慢指针刚好进入环时,二者的相对距离为N  环的结点数量为C

1.当N为偶数时,fast一次走3步能成立

2.当N为奇数时并且C为奇数时,fast一次走3步也能成立

3.当N为奇数并且C为偶数时,fast一次走3步不能成立

4.数学方法思考

设进入环之前的路程为L

因为:fast  指针 一次走3步,slow  一次性走 1步

所以: 3*L  == L + x*C + C - N

化简得: 2*L == (X+1)*C - N

观察此式子 等号左边  2*L 一定是 偶数 ,所以等号 右边一定也是 偶数

此时,N和C可以都是 奇数,也可以都是 偶数,

当N是奇数,C是偶数 时    (X+1)*C - N是一个奇数!

说明:N不能是奇数的同时C是偶数,上述总结的  (3.当N为奇数并且C为偶数时,fast一次走3步不能成立)  这种情况不存在

综上所有的分析:fast  一次性走3 步 也可以成功!!!

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

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

相关文章

智能私信神器,转化率飙升的秘密!

在当今信息爆炸的时代,企业和商家面临着巨大的竞争压力,如何有效地吸引潜在客户、提高客户转化率成为摆在每一位市场营销人员面前的难题。随着人工智能技术的不断发展,智能私信软件应运而生,为企业提供了一个高效、便捷的解决方案…

【OpenNJet下一代云原生之旅】

OpenNJet下一代云原生之旅 1、OpenNJet的定义OpenNJet架构图 2、OpenNJet的特点性能无损动态配置灵活的CoPilot框架支持HTTP/3支持国密企业级应用高效安全 3、OpenNJet的功能特性4、OpenNJet的安装使用编译安装配置yum源创建符号连接修改配置编译 5、通过 OpenNJet 部署 WEB SE…

[CISCN 2018]sm

目录 1.题目 3.解题 4.参考 1.题目 题目链接 from Crypto.Util.number import getPrime,long_to_bytes,bytes_to_long from Crypto.Cipher import AES import hashlib from random import randint def gen512num():order[]while len(order)!512:tmprandint(1,512)if tmp n…

探索小猪APP分发平台:构建高效的应用推广之路

在当今快速发展的移动互联网时代探索小猪APP分发平台:构建高效的应用推广之路,应用分发成为连接开发者与用户的关键桥梁。一个高效的分发平台可以显著提升应用的可达性和用户增长速度。 小猪app分发zixun.ppzhu.net 引言:小猪APP分发平台简介…

Spring AI 抢先体验,5 分钟玩转 Java AI 应用开发

作者:刘军 Spring AI 是 Spring 官方社区项目,旨在简化 Java AI 应用程序开发,让 Java 开发者像使用 Spring 开发普通应用一样开发 AI 应用。 Spring Cloud Alibaba AI 以 Spring AI 为基础,并在此基础上提供阿里云通义系列大模…

远程桌面报错:【出现验证错误。要求的函数不受支持】

WinR 输入【gpedit.msc】回车 依次打开 计算机配置----管理模板-----系统-----凭据分配---加密数据库修正 选择【已启用】,下拉菜单选择【易受攻击】

phpMyAdmin增加自定义IP登录教程

phpMyAdmin增加自定义IP登录教程 1、打开phpMyAdmin目录, 在此目录下是否有config.sample.inc.php文件,如果存在,那么将其改名为config.inc.php(为避免修改失误所造成的损失,强烈建议先备份config.sample.inc.php文件…

笔记85:如何计算递归算法的“时间复杂度”和空间复杂度?

先上公式: 递归算法的时间复杂度 递归次数 x 每次递归消耗的时间颗粒数递归算法的空间复杂度 递归深度 x 每次递归消耗的内存空间大小 注意: 时间复杂度指的是在执行这一段程序的时候,所花费的全部的时间,即时间的总和而空间复…

可视化大屏C位图:智慧场馆/场所图

Hello,我是大千UI工场,本期可视化大屏的焦点图(C位)分享将场馆作为焦点图的情形,欢迎友友们关注、评论,如果有订单可私信。 智慧场馆是指通过物联网、大数据、人工智能等技术手段,将传统场馆与…

Epinio:Kubernetes 的应用程序开发引擎-加CLI Demo演示

一、解决了什么问题? 开发人员如何专注于代码编写,怎么让他们可以完全忽略k8s基础设施并且和以前在本地Run一个应用一样的体验。 从源码构建一个容器程序 二、解决方案 Introduction | Epinio docs 三、Epinio 的 Kubernetes 的应用程序开发引擎 by Ra…

FFmpeg学习记录(二)—— ffmpeg多媒体文件处理

1.日志系统 常用的日志级别&#xff1a; AV_LOG_ERRORAV_LOG_WARNINGAV_LOG_INFOAV_LOG_DEBUG #include <stdio.h> #include <libavutil/log.h>int main(int argc, char *argv[]) {av_log_set_level(AV_LOG_DEBUG);av_log(NULL, AV_LOG_DEBUG, "hello worl…

怎样建设网站

建设一个网站需要经过一系列的步骤和技术&#xff0c;以下是一个简单的指导&#xff1a; 1. 确定网站目的&#xff1a;首先要确定网站的目的和目标。是为了促销产品&#xff1f;提供信息&#xff1f;还是为了社交交流&#xff1f;确定网站目的可以帮助你更好地规划网站的结构和…

【强训笔记】day8

NO.3 思路&#xff1a;相乘除以最大公约数等于最小公倍数。最小公倍数等于gcd&#xff08;a&#xff0c;a%b&#xff09;递归直到b等于0。 代码实现&#xff1a; #include <iostream> using namespace std;int gcd(int a,int b) {if(b0) return a;return gcd(b,a%b); }…

MySQL CRUD操作

前言&#x1f440;~ 上一章我们介绍了数据库的一些基础操作&#xff0c;关于如何去创建一个数据库&#xff0c;还有使用数据库&#xff0c;删 除数据库以及对表进行的一些基础操作&#xff0c;今天我们学习CRUD操作 俗称&#xff08;增删改查&#xff09; 如果各位对文章的内…

无U盘基于本地硬盘无损制作虚拟U盘(Windows、Linux系统安装启动盘)

知识点 实验环境 名称版本使用平台Win11本地硬盘格式GPT待安装镜像deepin-desktop-community-20.9-amd64.iso 文中工具下载链接&#xff1a; https://download.csdn.net/download/xzzteach/89263714 deepin-desktop-community-20.9-amd64.iso 文件结构如下&#xff1a; 在Li…

如何保证每次画出的都同一张人脸?AI绘画Stable Diffusion的Reference only教程

Ai绘画有一个很现实的问题&#xff0c;要保证每次画出的都是同一个人物的话&#xff0c;很费劲。 Midjourney就不必说了&#xff0c;人物的高度一致性一直得不到很好的解决。而在Stable Diffusion&#xff08;SD&#xff09;中&#xff0c;常用办法是通过同一个Seed值&#xf…

10G MAC层设计系列-(4)MAC TX模块

一、前言 MAC TX模块就是要将IP层传输过来的数据封装前导码、MAC地址、帧类型以及进行CRC校验&#xff0c;并与CRC值一块组成以太网帧。 二、模块设计 首先对输入的数据进行缓存&#xff0c;原因是在之后要进行封装MAC帧头&#xff0c;所以需要控制数据流的流动 FIFO_DATA_6…

Ubuntu编译安装MariaDB并进行初始化配置

Ubuntu编译安装MariaDB并进行初始化配置 1. 编译安装MariaDB2. 配置MariaDB3. Docker安装MariaDB 1. 编译安装MariaDB MariaDB官方安装文档&#xff1a;https://mariadb.com/kb/en/Build_Environment_Setup_for_Linux/    下载MariaDB源码&#xff1a;https://mariadb.org/ma…

Enum,你学会了吗?

大家后&#xff0c;我是小七。 今天给大家分享下java.lang包下面Enum类的面试点&#xff0c;本文阅读需3分钟。 Java轮子 分享程序员日常、职场、互联网项目、开发经验&#xff0c;专注技术提升 12篇原创内容 公众号 在 Java 编程中&#xff0c;枚举类型&#xff08;Enum&…

go是如何运行的?

前言 go程序的入口是main函数吗&#xff1f;诚然很多程序的入口都是main,比如java,C,C等&#xff0c;但是go由于他的运行时环境是代码&#xff0c;而不是像Java那样有自己的虚拟机&#xff0c;所以程序在运行main函数之前&#xff0c;需要做很多的准备工作&#xff0c; 该文章…