AcWing 34. 链表中环的入口结点(快慢指针赛跑+地址映射)

AcWing刷题1 一、前言 最近发现一个算法题目的宝藏平台,上面的题目其实都是比较偏向应用题了,所以可能更适合用来提高自己笔试的能力。在这里还没有入口的uu们可以在这里看一看哦:AcWing刷题网站 今天其实做了上周的周赛的一个题目,才发现自己很多基础的算法模板都没有掌握,所以只能说我算法还是没有真正的入门吧!今天其实也少稍微的学习了一下,关于区间合并的一个模板问题,题目描述如下: 二、题目描述 三、思路 本题的思路需要一些推导,也不是特别难,我们可以看到假设a数组中的ai=aja_i = a_jai​=aj​的话,那么由 阅读详情

1.快慢指针赛跑

这是一个做起来很巧妙的算法,而且这个方法既不会改变原链表的结构,又不会需要额外的空间。

具体的操作是:从头结点开始,令快指针每次移动两个单位,慢指针每次移动一个单位。如果链表有环则两个指针必定会在环上的某一个位置相遇。此时令快指针重回起点,然后让两个指针同时每次移动一个单位,当两个指针再次相遇时(必定会相遇),相遇的结点恰好就是环的入口结点。

证明如下:

假设链表头结点为A,环入口为B,两指针相遇位置为C,记AB,BC,CB距离分别为x,y,z。则当二者相遇时,快指针移动的总距离为x+y+z+y,而慢指针移动的总距离为x+y。由于快指针的速度是慢指针的二倍,因此其移动距离也应该是慢指针的二倍。也就是说2(x+y)=x+y+z+y。化简可得x=z。从而证明了算法的正确性。

具体代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *entryNodeOfLoop(ListNode *head) {
        if(!head || !head -> next) return NULL;
        ListNode *fast = head, *low = head;
        while(fast){
            fast = fast -> next;
            low = low -> next;
            if(!fast) return NULL;
            fast = fast -> next;
            if(fast == low){
                fast = head;
                while(fast != low){
                    fast = fast -> next;
                    low = low -> next;
                }
                return fast;
            }
        }
        return NULL;
    }
};

2.地址映射

如果题目并没有对空间复杂度有限制,那么可以考虑建立存放地址的集合。当指针遍历时遇到了地址相同的结点,则该结点就是环的入口结点。

具体代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *entryNodeOfLoop(ListNode *head) {
        set<ListNode *> addr;
        ListNode *p = head;
        while(p){
            if(addr.find(p) != addr.end()) return p;
            addr.insert(p);
            p = p -> next;
        }
        return NULL;
    }
};

 

AcWing 34. 链表中环的入口结点(python版) 题目描述 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 给定如上所示的链表: [1, 2, 3, 4, 5, 6] 2 注意,这里的2表示编号是2的节点,节点编号从0开始。所以编号是2的节点就是val等于3的节点。 则输出环的入口节点3. 思路 1、判断是否存在环 快指针一次走两步,慢指针一次走一步 若存在环,则两指针必会相遇 2、存在环后让慢指针回到起点 由于快指针比慢指针多走了k步,而这k步正好是环的长度, 设相遇点距环的起点的距离为 m,那么环的起点距头结点 he 阅读详情

相关推荐

Acwing这个网站用来学习算法还是挺不错的

粘贴其网站上的模板。。。做个参考 1.基础算法 —— 代码模板链接 常用代码模板1——基础算法 排序 二分 高精度 前缀和与差分 双指针算法 位运算 离散化 区间合并 2.数据结构 —— 代码模板链接 常用代码模板2——数据结构 链表与邻接表:树与图的存储 栈与队列:单调队列、单调栈 kmp Trie 并查集 堆 Hash表 C++ STL使用技巧 3.搜索与图论 —— 代码模板链接...

qq_42759120的博客 1万+

刷题网站

1. 力扣(这个网站中题解真的是非常丰富,适合新手刷题,不会的可以看看题解) 英文网址:https://leetcode.com/ 中文网址:https://leetcode-cn.com/ 2.hihoCoder 网址:https://hihocoder.com/ 3. 牛客网(题目质量还是ok的) 网址:https://www.nowcoder.com/ 4. 计蒜客(适合ACM竞赛) 网址:https://www.jisuanke.com/ 5. HDU 6. POJ 7.Co..

二哈 1万+

AcWing算法基础课——简单算法模板

本篇文章只给出代码模板,以及自己对该模板的理解。如果想看正确的算法思路,可以移步AcWing官网看详情。如有理解错误,欢迎大家批评指正。

Beau_Will的博客 1040

AcWing食用指南

​ AcWing是一个计算机编程相关知识学习网站,其中有算法课程与工程课程。适合计算机相关专业以及想要从事计算机相关专业工作的同学食用。这是一个很适合学习算法的平台,学习过程非常平滑,适合所有阶段的同学。

DM010maker的博客 7618

题解:AcWing 464 推销员

题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户。由于同一栋房子里可以有多家住户,所以可能有多家住户与入口的距离相等。,在不走多余的路的前提下,他最多可以积累多少点疲劳值。阿明是一名推销员,他奉命到螺丝街推销他们公司的产品。阿明是工作狂,他想知道,对于不同的。阿明会从入口进入,依次向螺丝街的。时,阿明最多积累的疲劳值。行,每行一个正整数,第。,表示螺丝街住户的数量。

团爸讲算法 440

ESP32学习,驱动LED点阵屏,SD卡播放GIF动图

搬运就可以实现效果,如果有不足,请批评指正。下步该学一下如何文章上视频了,老是截图不方便展示效果。

u011625956的博客 1868

https://www.acwing.com/problem/content/799/

#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 1e5; #define int long long int a[N],b[N]; signed main() { int n,m; cin>>n>>m; for (int i = 0; i < n; i ++ ) cin.

m0_57094519的博客 2900

保姆级教程:Win10/Win11系统下ArcGIS 10.2中文版完整安装与破解(含License Manager启动失败解决方案)

本文提供Windows 10/11系统下ArcGIS 10.2中文版的完整安装与破解教程,重点解决License Manager启动失败等常见问题。从安装准备、破解文件处理到最终配置验证,详细指导用户完成每一步操作,确保软件正常运行。特别针对主机名修改、端口占用等疑难问题提供专业解决方案。

weixin_29596051的博客 549

ACwing算法基础课——基础算法

算法基础课复习

astruggle___的博客 2502

【Hyper-V】虚拟机网络配置全解析:从端口映射到固定IP实战

本文全面解析Hyper-V虚拟机网络配置,从理解虚拟交换机三种模式(外部、内部、专用)的底层逻辑入手,指导用户创建稳定的内部/NAT网络,并详细演示如何在Linux与Windows虚拟机中配置固定IP。文章进一步深入讲解端口映射原理与netsh命令实战,以及双网卡配置和PowerShell自动化脚本等高级技巧,帮助用户彻底解决虚拟机网络“失联”问题,实现灵活可控的网络环境。

weixin_29290947的博客 269

重访时间与覆盖分析的stk操作

1.打开stk 2.创建一个新的场景,命名为Test,选择地球为场景星球,若为金星,可在Central Body里选择Venus(金星自转周期慢,自转周期243天,卫星轨道变化不明显)(其中start stop时间可设置长一些) 3.插入一个AreaTarget或者place,以AreaTarget为例 选择Pattern,Add三个点(用法可见前面的博客,有时候编程的代码也可以帮助理解stk的操作) 4.插入Satellite,选择Orbit Wizard(若想设置卫星的六根数也可

weixin_42664107的博客 1万+

Acwing - 算法基础课 - 笔记(数据结构 · 一)

文章目录数据结构(一)链表栈和队列单调栈单调队列KMP算法 数据结构(一) 本节讲解的是 链表与邻接表 栈与队列 看毛片(kmp)算法 链表 使用数组模拟单链表,双链表 使用数组模拟的链表,为静态链表,对单链表,开2个数组,其中1个用来存每个链表节点的值,另1个数组用来存每个节点的next指针。 对双链表,开3个数组,其中1个用来存每个链表节点的值,另外2个数组用来存每个节点的prev和next指针 单链表,用到比较多的是邻接表,邻接表经常用来存储图和树。(会在后续第三章讲图论时带出) 单链表练习题:A

vcj1009784814的博客 2052

【笔记篇】Davinci Configurator OS模块(上)

主要讲解了AUTOSAR OS配置项和Vector MICROSAR OS的特性

weixin_47571898的博客 2274

Django框架 (六) web端acwing一键登录

Django框架 (六) web端acwing一键登录 1. 在Django中集成Redis 1.1 安装django_redis pip install django_redis 1.2 配置settings.py 进入acapp/acapp/settings.py,添加: CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://127.0.0

May the Force be with you 2311

第069篇:浸入边界法进阶

浸入边界法(Immersed Boundary Method, IBM)是处理流固耦合问题的强大数值方法。本文深入介绍直接力法、反馈力法、Ghost Cell方法和多域IBM等高级技术。通过Python实现完整的IBM求解器,展示处理移动边界、弹性边界和多体相互作用的方法。浸入边界法,直接力法,反馈力法,Ghost Cell,流固耦合,移动边界,弹性边界Navier-Stokes方程添加体积力项:∂u∂t+(u⋅∇)u=−1ρ∇p+ν∇2u+f\frac{\partial \mathbf{u}}{\part

2401_87715305的博客 412

android13删除录屏权限提示框-去除录屏提示

在Android 13中,当应用请求屏幕录制权限时,系统会弹出一个权限提示框,要求用户明确授权。这个提示框是为了增强用户隐私保护,让用户知道有应用尝试录制屏幕。但是,在某些情况下,开发者可能希望避免显示这个提示框,以提供更流畅的用户体验。本文将介绍如何在Android 13中删除录屏权限提示框。

zhutoubenben的专栏 1880

一键授权登录

该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数(如果是将第三方授权登录绑定到现有账号上,那么推荐用随机数 + user_id作为state的值,可以有效防止CSRF攻击)access_token的有效期为2小时,时间较短。请求地址:https://www.acwing.com/third_party/api/oauth2/access_token/如果access_token未过期,则将当前的access_token的有效期延长为2小时。

m0_59519985的博客 821

如何解除“无法完成操作 因为文件包含病毒或潜在垃圾软件”

当运行软件遇到“无法完成操作 因为文件包含病毒或潜在垃圾软件”时,如何解决?控制面板-系统和安全-Windows Defender防火墙-自定义设置,将专用网络及公用网络关闭。点击后,选择“病毒和威胁防护”-管理配置。进入安全中心后,选择“病毒和威胁防护”将需要排斥的选项输入后,保存配置即可。2:打开windows安全中心。

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 6万+

ACwing 天才ACM 题解

题面入口:https://www.acwing.com/problem/content/111/ 题目大意,将一个数列划分成最少的几段,满足每段内的数据集合中,取M对最大最小数出来,将其取出来的每对数求差值并平方,并求这M对的差值平方的求和值S,这个值不能超过指定的T。 题目分析:   从划分后的集合中选出M对数,让每对数的差的平方的和最大值为一个贪心模型,我们只需要将集合中的元素按从小到大排序,...

在AC与WA间徘徊 1180

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

推荐资源:算法、刷题网站

开始刷题之旅,推荐给大家几个网站,Joy自己也Mark一下: 1,AcWing 网址,北大几个牛人创建的程序员刷题网站,良心首选。yxc大牛的空间附上,有宝藏!!! 2,LeetCode 乐扣,刷题网址,一起刷题!!! 3,牛客网 经典刷题网址,刷题、笔试必备啊! 4,剑指offer,网址,网上试题资源,一起做offer收割机!!! 附上GitHub上的程序代码,cli...

Joye-joy的博客 4602

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

程序员的必备网站 - 合集(找资源?看我一个就够了)

程序员、必备、资源、学习、网站

weixin_48865435的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

基础算法

785. 快速排序 题目 给定你一个长度为n的整数数列。 请你使用快速排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行,第一行包含整数 n。 第二行包含 n 个整数(所有整数均在1~109范围内),表示整个数列。 输出格式 输出共一行,包含 n 个整数,表示排好序的数列。 数据范围 1≤n≤100000 输入样例: 5 3 1 2 4 5 输出样例: 1 2 3 4 5 解法 分而治之 一个优美的思路: 左边一个指针i,右边一个指针j 保证指针 i 左边的值都比x要

ivhs的博客 378

AcWing-算法基础课总结

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

峰峰爱吃肉 3573

信息学竞赛有什么好的比赛网站?

点击上方蓝字关注我们1、HustOJ http://47.110.135.197 热心家长创建的一个自测 OJ,与华中科技大学颇有渊源。不定期举办 一些针对初学者的比赛。菜鸟们不妨一试。2...

IT_Scratch的博客 2335

AcWing-算法提高课【合集】

先打基础再提高

violet的博客 1万+

ACwing实现原理猜想

类似于aliyun的ecs服务器,y总在服务器上(VM)虚拟出多个节点(虚拟机),y总应该没钱搞多个服务器搭建ecs云服务器集群,应该是vps,由于ip独立,虚拟机脱离服务器独立存在,我们可以通过远程连接(acwing/aliyun的账户登录)到y总服务器上的虚拟机,实现云端虚拟操作系统。 我们先访问云服务器进程,登录时发送数据帧给云服务器,告诉它我们的请求,云服务器返回虚拟机数据包,我们就可以在浏览器中查看了,就相当于时远程登录虚拟机。 虚拟机和网页内容合并,就是了。 ...

Zyh's blog 1902
上一篇: AcWing 33. 链表中倒数第k个节点 (快慢指针赛跑)
下一篇: AcWing 35. 反转链表(两种链表两种通法,头插法+原地法)
Zee_Chao
博客等级 码龄11年 168粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值