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

news2024/10/5 16:30:49

记录一下算法题的学习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;
    }
}

结束拜拜! 

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

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

相关文章

芯片技术前沿:了解构现代集成电路的设计与制造

芯片技术前沿:解构现代集成电路的设计与制造 摘要:本文将深入探讨芯片技术的最新进展,重点关注集成电路的设计与制造。我们将带领读者了解芯片设计的基本流程,包括电路分析、版图设计和验证等步骤,并介绍当前主流的制造工艺。此外,我们还将讨论芯片行业面临的挑战以及未…

【腾讯云云上实验室】探索向量数据库背后的安全监控机制

当今数字化时代,数据安全成为了企业和个人最为关注的重要议题之一。随着数据规模的不断增长和数据应用的广泛普及,如何保护数据的安全性和隐私性成为了迫切的需求。 今天,我将带领大家一起探索腾讯云云上实验室所推出的向量数据库&#xff0c…

大电流和大电压谁对人体伤害大

突然想起以前看的这个, 网上有很多解答了这个问题,答案是大电流比大电压对人体伤害大。 我之所以重新来写些, 是想起一种有趣的比喻, 这个答案不绝对。 先看一个场景, 一群牛和一头老虎对你冲来, 谁对你的…

计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(用户上传头像+用户收货管理)

计算机毕业设计|基于SpringBootMyBatis框架的电脑商城的设计与实现(用户上传头像) 该项目分析着重于设计和实现基于SpringBootMyBatis框架的电脑商城。首先,通过深入分析项目所需数据,包括用户、商品、商品类别、收藏、订单、购物…

每日汇评:黄金有望在美欧通货数据周回升至2020美元上方

金价在2000美元以上占据主导地位,巩固了其2018美元的六个月高点; 美元在避险情绪中暂停下跌,美债收益率小幅上升; 金价本周收于2000美元以上,在关键通胀数据公布之前将有更多涨幅; 黄金价格已经从周一亚洲早…

SOLIDWORKS髙级孔命令及相关问题

本文介绍的是SOLIDWORKS髙级孔的命令应用。髙级孔主要用来做一些模型上的组合孔特征。我们先来看一个典型的例子,如图1所示,将轴侧视图能看到的3个面先进行“更改透明度”操作,以便看到模型内部孔的特征。 添加图片注释,不超过 14…

配电房无人值守监控系统

配电房无人值守监控系统是一种特殊的智能化监控系统,专为无人值守的配电房设计。依托电易云-智慧电力物联网,它采用先进的技术手段,实现对配电房环境、设备等的全方位实时监测和自动控制,确保配电房在无人员在场的情况下仍能安全、…

小波降噪的原理,以及软阈值函数和硬阈值函数的详细定义,应用和区别,以及数学公式的解释!!!看完你就懂了软阈值函数和硬阈值函数

文章目录 前言一、软阈值函数和硬阈值函数是什么?二、软阈值函数和硬阈值函数的区别三、软阈值函数和硬阈值函数的应用四、软阈值函数和硬阈值函数的数学公式总结 前言 小波降噪是一种应用小波理论的信号降噪方法,主要通过减少噪声的干扰,同…

Intellij Idea 断点小圆变成灰色怎么处理

场景1:变成了灰色实心圆 原因 断点变成灰色通常表示该断点处于失效状态。这可能是由于无意中点击了debug调试下方的“mute breakpoints”按钮导致的。 解决方案 依次点击设置小图标->View Options->Mute BreakPoints. 点击后 Mute BrakPoints左侧显示✔ 符号…

亥姆霍兹线圈的组成

亥姆霍兹线圈是由两个半径、匝数、电流★全相同的线圈,距离为半径长度,运行电流方向相同组成。 亥姆霍兹线圈是一种产生均匀磁场的线圈,其磁场特点是在内部产生均匀度较高的磁场,一般长螺线管的均匀度要优于赫姆霍兹线圈&#xf…

2020年06月 Scratch(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共15题,每题2分,共30分) 第1题 执行下图程序后,“花名”列表的第3项是? A:莲花 B:丁香 C:合欢 D:月季 答案:C 列表基本知识,选C。 第2题 执行如下图所示程序后,其结果为? A: B:

Linux(CentOS7.5):新增硬盘分区纪实

一、服务器概述 1、既有一块系统硬盘,新增一块100G硬盘。 2、要求,将新插入硬盘分为:20G、30G、50G。 二、操作步骤 1、确认新硬盘是否插入成功: fdisk -l# 红色框出来的,为识别出来的新硬盘信息 # 黄色框出来的&#…

C语言——输入 10 个数,分别统计其中正数、负数、零的个数

#include <stdio.h> int main() {int numbers[10]; // 存储输入的10个数int positive_count 0; // 正数计数器int negative_count 0; // 负数计数器int zero_count 0; // 零计数器// 输入10个数printf("请输入10个数&#xff1a;\n");for (int i 0; i …

Flask Session 登录认证模块

Flask 框架提供了强大的 Session 模块组件&#xff0c;为 Web 应用实现用户注册与登录系统提供了方便的机制。结合 Flask-WTF 表单组件&#xff0c;我们能够轻松地设计出用户友好且具备美观界面的注册和登录页面&#xff0c;使这一功能能够直接应用到我们的项目中。本文将深入探…

解读向量数据库

不论是RAG&#xff0c;还是Agent&#xff0c;几乎每个LLM 驱动的应用程序都可能会用到向量数据库。那么&#xff0c;向量数据库是什么&#xff1f;与传统数据库有何不同&#xff1f; 又如何选择向量数据库呢&#xff1f; 本文是老码农关于向量数据库的学习笔记。 1. 什么是向量…

PC删除数据,并提示删除成功

<template<el-button size"mini" type"text">分配权限</el-button><el-button size"mini" type"text" click"btnEditRow(row)">编辑</el-button ><el-popconfirmtitle"这是一段内容确定…

通付盾Web3专题 | SharkTeam:起底朝鲜APT组织Lazarus Group,攻击手法及洗钱模式

国家级APT&#xff08;Advanced Persistent Threat&#xff0c;高级持续性威胁&#xff09;组织是有国家背景支持的顶尖黑客团伙&#xff0c;专门针对特定目标进行长期的持续性网络攻击。朝鲜APT组织Lazarus Group就是非常活跃的一个APT团伙&#xff0c;其攻击目的主要以窃取资…

P2704 [NOI2001] 炮兵阵地 题解

P2704 题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示 解题思路分析Code更多方法 题目 原题链接 题目描述 司令部的将军们打算在 N M N\times M NM 的网格地图上部署他们的炮兵部队。 一个 N M N\times M NM 的地图由 N N N 行 M M M 列组成&#x…

Android 12 打开网络ADB并禁用USB连接ADB

平台 RK3588 Android 12 Android 调试桥 (adb) Android 调试桥 (adb) 是一种功能多样的命令行工具&#xff0c;可让您与设备进行通信。adb 命令可用于执行各种设备操作&#xff0c;例如安装和调试应用。adb 提供对 Unix shell&#xff08;可用来在设备上运行各种命令&am…

代码块02使用细节-Java

代码块02使用细节 四、使用细节1、static代码块/静态代码块&#xff0c;随着类的加载而执行&#xff0c;且只执行一次2、 类什么时候被加载 [重要 ! ]案例演示&#xff1a;static代码块 3、普通代码块&#xff0c;在创建对象实例时&#xff0c;会被隐式的调用。案例演示&#x…