java数据结构与算法刷题-----LeetCode287. 寻找重复数

Zlib1.2.11源码编译(Win10+VS2019) 下载 下载网址: zlib Home Site 得到文件: 解压缩到“D:\SourceCodes\zlib-1.2.11” 使用CMake配置、生成并打开项目 将CMakeLists.txt拖入CMake,配置(Configure): 生成(Generate) 打开项目(Open Project),CMake调用VS2019打开项目 生成debug版本 构建项目ALL_BUILD。成功生成debug版本 在“D:\Sourc... 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

解题思路

弗洛伊德判圈法,也就是快慢指针判圈法(龟兔赛跑算法),此算法分为两个步骤

  1. 判断是否有环,并得到快慢指针相遇的结点:慢指针每次走一格,快指针每次走两格,只要有环,必然会相遇。
  2. 获取构成环的结点:相遇后,让慢指针归0,快指针继续呆在相遇的地方,然后两个人依次一格一格的后移,最终再次相遇的地方,就是构成环的地方。
本题是数组题,如何想到用环形链表的解法呢?
  1. 首先,这个题的数组,下标范围和取值范围是几乎相同的。因为下标范围在0 ~ n。取值范围是1 ~ n。那么下标和元素值是可以联立的。我们可以设置链表结点为[下标,元素值]来构成链表。因为有重复的元素值,那么这个链表比如有环,图解如下:
    在这里插入图片描述
  2. 既然抽象出了链表,就可以使用弗洛伊德判圈法,先判断是否有环,然后获取相遇结点位置。下面给出两个例子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 获取了相遇结点后,接下来就是慢指针归0,快指针继续在相遇的结点。然后两个指针依次一格一格的后移即可。图解如下
    在这里插入图片描述
代码:时间复杂度O(n) 空间复杂度O(1)

在这里插入图片描述

class Solution {
    public int findDuplicate(int[] nums) {
        int slow = 0, fast = 0;//快慢指针
        //将数组转换为链表,nums数组下标作为链表结点。对应下标的元素值作为指向下一个结点的指针
        //因此,只要数组中有重复元素,那么这个链表一定有环
        do{
            slow = nums[slow];//相当于 slow = slow.next
            fast = nums[nums[fast]];//相当于fast = fast.next.next;
        }while(slow != fast);//找到环,并指向相遇结点
        //然后slow归0,fast不变,依次后移,找到构成环的结点
        slow = 0;//slow归0
        while(slow != fast){//一格一格的后移,直到再次相遇,就是环的入口
            slow = nums[slow];
            fast = nums[fast];
        }
        return slow;//最终返回这个结点值
    }
}
Qt Installer Framework4.6.1的最基础使用1(win10+离线安装包 ) 因工作需要,win程序发布后,打包成一可执行exe文件,且兼容win7系统笔者记录了一些关键要点,供有需要的小伙伴使用。 阅读详情

相关推荐

机器学习入门基础 | 基于python的高光谱图像特征挖掘:PCA + 形态学属性处理可视化实战

本文介绍了一种基于PCA和形态学操作的高光谱图像特征提取方法。通过主成分分析降低数据维度,再运用面积开闭操作增强空间结构特征,有效去除噪声并填补孔洞。实验采用WHU-HI-HanChuan数据集,提供完整的Python实现代码,包括数据加载、PCA降维、形态学处理及结果可视化等步骤。该方法能够显著改善图像质量,为后续分类和变化检测任务提供更好的特征输入。实验结果表明,不同阈值的形态学处理能呈现不同程度的空间结构增强效果,对区域生长、分割和聚类等应用具有重要价值。

lestatlu的博客 1047

Java——寻找重复数

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

m0_60867520的博客 2014

【故障排查】telnet连接失败:端口23不可达的深度分析与解决方案

本文深度解析telnet连接失败时端口23不可达的常见原因与解决方案。从快速自查目标地址、端口到服务端排查,涵盖服务状态检查、防火墙配置及安全组设置,并提供进阶诊断工具与抓包分析方法。文章强调telnet协议的安全风险,建议在生产环境中改用SSH等加密协议进行远程管理。

weixin_28323057的博客 396

leetcode 287. 寻找重复数(java)

数组长度为 n + 1,同时给定的 nums[i]都在 [1,n] 范围内,因此我们可以设定哈希规则为 nums[idx] = idx + 1,即数值 x 会放在下标 x - 1 的位置。给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。用数组中的值做hash表中的key,我们一次循环下来,key 重复就是找到了.输入:nums = [1,3,4,2,2]输入:nums = [3,1,3,4,2]

SP_1024的博客 516

属性基加密(Attribute-based Encryption, ABE)

KP-ABE中,用户的密钥定义了访问策略,密文的属性与策略进行匹配。CP-ABE中,密文定义了访问策略,用户的属性与策略进行匹配。

2201_75392924的博客 1831

StarRocks FE启动异常

服务器断电,StarRocks FE 启动失败。

qq_15138049的博客 1114

每日算法----寻找重复数(Java)

这个题看注释就可以了。

m0_74117790的博客 312

【MATLAB】STM32电机调速闭环控制工程

本文提出了一种基于MATLAB仿真与STM32实现的直流电机闭环PID调速控制方案。通过MATLAB建立电机数学模型并进行参数整定,仿真验证了增量式PID算法在启停、稳态和抗扰动方面的优越性能。基于STM32F103搭建了硬件系统,实现了编码器测速、定时中断控制、PWM输出等功能。实测表明,该系统转速超调<2%、稳态误差±2r/min,具备快速响应和强抗扰能力。相比开环控制,闭环调速显著提升了动态性能和稳态精度。方案提供了完整的仿真代码和嵌入式工程源码,可直接应用于智能小车、工业传动等场景,具有较高的

unber的博客 50

Java刷题笔记13:寻找重复数

数组模拟链表,Floyd判圈法。执行时间击败100%。 设置两个指针,遍历链表,一个指针每次走一步,一个指针每次走两步。若是链表存在环,那么在慢指针走到尾部前它们一定会相遇。简单说明一下,当链表中有环时,快指针一定会先进入环,并且一直在环中循环等待慢指针也进入环。假设环的周长为L,考虑极端情况,在慢指针到达环入口时,快指针恰好在慢指针的前面一步。此时慢指针与快指针的距离为L-1.每走一步它们的距离就会减一,而慢指针重新走回入口处需要L步,所以在慢指针走完之前快指针一定能追上它。

First_C0de的博客 511

爆肝5万字❤️Open3D 点云数据处理基础(Python版)

本文为Open3D 点云数据处理基础教程(Python版),小白也能轻松上手!还等什么呢,学起来!

孙悟空 13万+

Handler相关面试题

常见面试题: Handler相关 一.谈一谈你对handler的认识,例如:机制和实现等。 handler机制图解: handler常见使用过程: ①.子线程向主线程发送消息: 在主线程中新建Handler实例,并重写handleMessage()方法用于处理子线程传过来的message; 通过Message.obtain()方法获取到消息msg,然后将需要传递给主线程的信息通过msg的what、obj等字段传递; 通过handler的sendMessage发送msg消息,然后在hand

龚礼鹏的博客 3171

找数组中重复的数字(java代码实现)

找数组中重复的数字 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1。......

qq_42250887的博客 4147

stata 工具变量法【计量经济系列(七)】

stata 工具变量法【计量经济系列(七)】 1. 内生性 2. 工具变量3. 2SLS (二阶段最小二乘法) 4. 弱工具变量5. 工具变量外生性的过度识别检验 6. 豪斯曼检验6.1 传统豪斯曼 6.2 杜宾-吴-豪斯曼检验(DWH)

侯小啾技术博客 2万+

leetcode刷题记录(九十九)——287. 寻找重复数

287. 寻找重复数 - 力扣(LeetCode)287. 寻找重复数 - 给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返回 这个重复的数。你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。

weixin_45994787的博客 1327

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LeetCode287.寻找重复数

涉及到的算法:哈希表判重、二分查找、快慢指针 抽屉原理以及【Floy判圈算法】

冢狐的私人空间 634

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LeetCode 287. 寻找重复数

我的LeetCode:https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 287. 寻找重复数 题目 给定一个包含n + 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设...

iTuring_Zhou的专栏 119

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[LeetCode]287. 寻找重复数(java实现)

[LeetCode]287. 寻找重复数(java实现)1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 1. 题目 2. 读题(需要重点注意的东西) 注意: 重复的数可能重复多次; 不能修改数组; 只能使用O(1)的空间 思路: 意识到这是一个Linked List Cycle Floyed’s 算法,找到循环入口 3. 解法 -------------------------------------------------

cloud的博客 695

leetcode-第287题-寻找重复数

博主并没有什么算法基础,所以写的不好,勿喷,抛砖引玉,欢迎交流,感谢。 //给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 // 示例 1: // 输入: [1,3,4,2,2] //输出: 2 // 示例 2: // 输入: [3,1,3,4,2] //输出: 3 // 说明: // 不能更改原数组(假设数组是只读的)。 // 只能使用额外的 O(1) 的空间。 // 时间.

itjavaee的博客 353

Leetcode刷题java之287. 寻找重复数

执行结果: 通过 显示详情 执行用时 :5 ms, 在所有 Java 提交中击败了33.14% 的用户 内存消耗 :38.1 MB, 在所有 Java 提交中击败了19.45%的用户 题目: 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: ...

逆水行舟,不进则退 466

leetcode287——寻找重复数——java实现

题目要求: 分析1: 刚看到这道题目的时候,我的第一反应是HashMap,事实上我也这样去做了,但是性能很差,只击败了百分之十几的用户。 具体代码如下: class Solution { public int findDuplicate(int[] nums) { if(nums == null || nums.length == 0) retur...

阿花的IT历程 450

Leetcode287Find the Duplicate Number寻找重复数

Leetcode287寻找重复数 题目描述: 在一个长度为n+1的数组中,每个数都是1-n之间,只有一个数出现两次,其他的数都只出现过一次,请找出这个数。 输入: 长度为n的数组 输出: 重复的数字num 要求: 时间复杂度O(N),空间复杂度O(1) 思路: 1.使用set集合的方式,但是很明显,空间复杂度是O(N)

zsjwish的博客 441

leetcode刷题记录

刷题过程记录

洪肥肥的博客 2063

【Java】Leetcode287 寻找重复数

题目: 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 思路: 题目不难,难在限制条件 通过求环的方法来找到这个重复的数。 方法使用查找环的第一个节点 代码: class Solution { public int findDuplicate(int[] nums) { if(nums.length==0)

qq_42482205的博客 188

leetcode刷题记录之287

287、寻找重复数   给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3 说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间...

qq_41278826的博客 423

LeetCode Hot 热题100 算法题 287.寻找重复数-算法&测试-medium模式

LeetCode Hot 热题100 算法题 287.寻找重复数-算法&测试-medium模式 给定一个包含(n+1)个整数的数组nums,其数字都在1到n之间(包括1和n)。可知至少存在一个重复的整数。假设只有一个重复的整数,找出该数。 输入:[1,3,4,2,2] 输出:2 注意: 不能更改原数组; 只能使用额外的O(1)空间; 时间复杂度小于O(n^2); 此数组中只有一个重复的数字,但它可能不止重复出现一次。 package leetcode.medium; import java.uti

weixin_48017483的博客 280

寻找重复数

lettCode 287 寻找重复数 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3 说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间复杂度小于 O(n2) 。 数组中只有一个重复的数字,但它可能不止重

jump_into_zehe的博客 164
上一篇: java数据结构与算法刷题-----LeetCode645. 错误的集合(位运算解法需要重点掌握)
下一篇: java数据结构与算法刷题-----LeetCode667. 优美的排列 II
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值