算法-技巧-中等-寻找重复数,环形链表|,||

记录一下算法题的学习13

这次代码中运用到的技巧是「Floyd 判圈算法」(又称龟兔赛跑算法),它是一个检测链表是否有环的算法

我们想象乌龟tortoise兔子rabbit在链表上移动,乌龟爬的慢,兔子爬的快,当乌龟和兔子从链表上的同一节点开始移动时,有两种情况|如果该链表中没有那么兔子将一直处于乌龟的前方。||如果该链表有环,那么兔子会先于乌龟进入环中,并且一直在环内移动。等到乌龟进入环中,由于兔子的速度要快于乌龟,它一定会在某个时刻与乌龟相遇,即使兔子套了乌龟若干圈。

这也跟赛车一样,A技术高超的赛车手与性能优越的赛车搭配B技术不精的赛车手与性能低效的赛车搭配,他们从同一起始点出发,如果是环形跑道,A肯定能追上B相遇。如果是直线跑道,那么B最多看到A的尾灯。

由此引出快慢指针,我们定义两个指针,一快一慢。慢指针每次只移动一步,而快指针每次移动两步

寻找重复数

题目:

给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。

假设 nums 只有 一个重复的整数 ,返回 这个重复的数 

图片示例

 

 这里在重新回忆一下while和do···while循环语句的区别

while循环的结构

while( ①条件表达式 ) {

       ② //循环内容

}

do···while循环的结构

do{

 ② //循环内容

}while(①条件表达式)

 二者的区别:
  • do...while,无论是条件①是否成立,代码②一直会先执行一次,然后再判断。
  • while,他会在代码执行前先判断①条件是否成立,如果成立才会执行②代码。
     

代码展示

class Solution {
    public int findDuplicate(int[] nums) {
        int slow = 0;
        int fast =0;
        do {
            slow = nums[slow];
            fast = nums[nums[fast]];
        } while (slow != fast);
        slow = 0;
        while (slow != fast) {
            slow = nums[slow];
            fast = nums[fast];
        }
        return slow;
     }
    }

 环形链表|

题目

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

图片示例

代码展示

public class Solution {
    public boolean hasCycle(ListNode head) {
        if (head == null || head.next == null) {
            return false;
        }
        ListNode slow = head;
        ListNode fast = head.next;
        while (slow != fast) {
            if (fast == null || fast.next == null) {
                return false;
            }
            slow = slow.next;
            fast = fast.next.next;
        }
        return true;
    }
}

环形链表||

题目:

给定一个链表的头节点  head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况

 图片示例

代码展示

public class Solution {
    public ListNode detectCycle(ListNode head) {
            if (head == null) {
            return null;
        }
        ListNode slow = head, fast = head;
        while (fast != null) {
            slow = slow.next;
            if (fast.next != null) {
                fast = fast.next.next;
            } else {
                return null;
            }
            if (fast == slow) {
                ListNode ptr = head;
                while (ptr != slow) {
                    ptr = ptr.next;
                    slow = slow.next;
                }
                return ptr;
            }
        }
        return null;
    }
}

结束拜拜! 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity EventSystem的一些理解和使用

Unity的EventSystem是用于处理用户输入和交互的系统。它是Unity UI系统的核心组件之一,可以用于捕捉和分发各种事件,例如点击、拖拽、按键、射线等。 常用的属性和方法有以下这些: 属性: current: 获取当前的EventSystem实例。…

数据结构--->单链表

文章目录 链表链表的分类 单链表单链表的存储结构单链表主要实现的接口函数单链表尾插动态申请新节点单链表头插单链表的尾删单链表的头删在指定位置之前插入单链表查找插入 在指定位置之后插删除指定位置元素删除指定位置之后的元素顺序输出链表销毁单链表 顺序表和单链表的区…

随手写了个博客多平台发布脚本:Python自动发布文章到Wordpress

​ 引言 作为一名技术博主,提高博客发布效率是我们始终追求的目标。在这篇文章中,我将分享一个基于Python的脚本,能够实现博客多平台发布,具体来说,是自动发布文章到WordPress。通过这个简单而高效的脚本&#xff0c…

Android 单元测试初体验(二)-断言

[TOC](Android 单元测试初体验(二)-断言) 前言 当初在学校学安卓的时候,老师敢教学进度,翻到单元测试这一章节的时候提了两句,没有把单元测试当重点讲,只是说我们工作中几乎不会用到,果真在之前的几年工作当中我真的没…

人工智能与供应链行业融合:预测算法的通用化与实战化

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 让我们一起深入探索人工智能与供应链的融合,以及预测算法在实际应用中的价值!🔍🚀 文章目录 前言供应链预测算法的基本流程统计学习模型与机…

Gitea和Jenkins安装

Gitea Gitea:https://dl.gitea.com/gitea/1.21.0/ Jenkins:https://www.jenkins.io/download/ 数据库配置 可以参考官方文档-https://docs.gitea.cn/1.20/installation/database-prep,这里以MySQL作为讲解 MySQL 在数据库实例上&#xf…

LeetCode-面试题08.01 三步问题 C/C++实现 超详细思路及过程[E]

🎈归属专栏:深夜咖啡配算法 🚗个人主页:Jammingpro 🐟记录一句:摆了一个周末了,不能摆了,努力起来!! 文章目录 LeetCode-面试题08.01 三步问题🚗题…

SpringBoot : ch08 自动配置原理

前言 在现代的Java开发中,Spring Boot已经成为了一个备受欢迎的框架。它以其简化开发流程、提高效率和强大的功能而闻名,使得开发人员能够更加专注于业务逻辑的实现而不必过多地关注配置问题。 然而,你是否曾经好奇过Spring Boot是如何做到…

C++11线程以及线程同步

C11中提供的线程类std::thread,基于此类创建一个新的线程相对简单,只需要提供线程函数和线程对象即可 一.命名空间 this_thread C11 添加一个关于线程的命名空间std::this_pthread ,此命名空间中提供四个公共的成员函数; 1.1 get_id() 调用命名空间s…

识别验证码

背景 需求是要爬取某网站的数据, 已有账号密码, 但这个网站需要登录, 登录需要输入验证码 验证码样式如下 调研了Tesseract框架, 识别效果不佳. 后来使用ddddocr, 能正确识别. https://github.com/sml2h3/ddddocr 代码如下 def ocr():response requests.get(http://xxx/get…

【JavaScript】封装自己的JavaScript公共工具函数,并上传到npm中 进行下载

js公共方法封装方式都有哪些 全局函数 function greet(name) {console.log("Hello, " name "!"); }greet("Alice"); // 调用全局函数对象字面量 var utils {add: function(a, b) {return a b;},subtract: function(a, b) {return a - b;}…

使用opencv实现图片相似度检测

1.为什么学这个,我对图像处理非常感兴趣,我联想到海尔的指纹识别门锁是如何进行检测的,我在想不应该呀,单片机性能这么差,应该是使用了训练后的数据去检测图片的,如果我要实现草莓检测,知道它是不是草莓,我觉得单纯使用图片处理是不够的,我考虑过使用指纹模块来接触草莓从而实现…

芯片制程中温度的几种表示方法

在众多影响芯片制程的因素中,温度控制被视为一项至关重要的技术。温度是比较一种物质相对于另一种物质是冷还是热的衡量标准,它会影响到芯片的性能、可靠性以及最终产量。在不同的制程步骤中,温度扮演着各种各样的角色。但是在评价制程温度高…

振弦式轴力计和振弦采集仪组成的安全监测解决方案

振弦式轴力计和振弦采集仪组成的安全监测解决方案 振弦式轴力计和振弦采集仪是一种常用的结构安全监测工具,可以用于评估建筑物、桥梁、隧道或其他结构的结构健康状态和安全性能。这种监测方案较为先进、精确,并且能够监测长期的结构反应,因此…

Git指定分支或文件回退到指定版本

文章目录 一、分支回滚1.1、使用 git reset 命令1.2、使用 git revert 命令1.3、使用 git checkout 命令 二、文件回滚2.1、回滚未提交文件2.2、回滚已提交文件2.2.1、首先查看文件的历史版本2.2.2、找到你想要还原的版本2.2.3、将文件还原到你想要还原的版本2.2.4、提交代码 三…

便利高效双赢:无人机油气管道巡检全面升级

我国庞大的油气管道网络,包括原油、成品和天然气管道,因为地理区域广泛、建设年代久远、安全事故频发等现实因素,对管道的安全巡护与管理提出了更高的需求。在这一背景下,传统的人工巡护方式显然已经难以满足对高、精、准的要求。…

s_v_web_id或fp协议过签名,dy滑块

某音s_web_id或fp协议过签名 ‘h5_sdk_version’, ‘2.36.0’ "search_impr":{"entity_id":"1135137973613200"},"link_item_list":null,"user_permissions":null,"offline_info_list":null,"is_cf":…

计算机组成原理-页式存储器

文章目录 页式存储虚拟地址vs实地址页表:逻辑页->主存块号地址交换过程地址交换过程(增加TLB)总结 页式存储 把程序分散式地放到主存的不同块的地方 虚拟地址vs实地址 操作系统将逻辑地址映射到主存块中的物理地址,对应的物…

新疆大学与优艾智合机器人成立联合创新实验室

11月22日至24日,第五届中国工业互联网大赛新疆赛站决赛在新疆维吾尔自治区昌吉回族自治州昌吉市举行。在大赛中崭露头角的优秀解决方案,将为绿色工厂、绿色园区、绿色供应链等建设提供新的动能,促进工业绿色发展。 作为大赛的成果延伸&#…

unity UGUI中获取点击位置处的URL链接

需求是&#xff0c;我们在一个text组件中像写网页那样写入链接&#xff0c;然后点击这个链接&#xff0c;就能访问配置的网页啥的。比如&#xff1a; <a href"hello">链接文本</a></summary> 最终的效果如下&#xff1a; 图中&#xff0c;image区…