尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

力扣287-寻找重复数

力扣287-寻找重复数
📅 发布时间:2026/7/19 18:37:21

287. 寻找重复数 - 力扣(LeetCode)

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

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

你设计的解决方案必须不修改数组nums且只用常量级O(1)的额外空间。

示例 1:

输入:nums =[1,3,4,2,2]
输出:2

示例 2:

输入:nums =[3,1,3,4,2]
输出:3

示例 3 :

输入:nums =[3,3,3,3,3]
输出:3

提示:

  • 1 <= n <= 105
  • nums.length == n + 1
  • 1 <= nums[i] <= n
  • nums中只有一个整数出现两次或多次,其余整数均只出现一次

进阶:

  • 如何证明nums中至少存在一个重复的数字?
  • 你可以设计一个线性级时间复杂度O(n)的解决方案吗?

对 i=0,1,2,…,n,连一条从 i 到nums[i]的有向边,得到一个有向图

每个节点的入度,都表示这个节点在 nums 中的出现次数

以示例一的[1, 3, 4, 2, 2]为例

因为2出现了两次,下标分别为3和4,所以一定会有 3 -> 2 和 4 -> 2 两条边,2 的入度就是它出现的次数

严谨地说,假设nums[i] == nums[j] == k,即 k 为那个重复出现的数,那么就必然建立 i -> k 和 j -> k 两条边

由于每个节点的出度都为1(因为下标唯一),所以 n + 1 个节点有 n + 1 条边,这样的有向图必然有环,找到环的入口即可

注意,可能有多个连通块,例如[1, 2, 1, 4, 3]中,3 和 4 是互相指向的,两个节点构成一个连通块。因此要从节点 0 出发寻找

那么问题就变成了找链表中环开始的节点,使用 Floyd 判圈算法,其实就是快慢指针

假设头节点到入环口要走 a 步,环长为 b,相遇时慢指针走了 c 步,那么快指针走了 2c 步,设快指针比慢指针多走了 k 圈,则有:2c - c = kb,即 c = kb

慢指针从入环口开始,在环中走了 c - a = kb - a 步到达相遇点

对于快指针,从入环口开始,在环中走了 2kb - a 步到达相遇点

那么如果同时让快慢指针再走 a 步,慢指针从入环口开始在环中走了 kb 步,快指针则是 2kb 步,而环长为 b,所以此时慢指针从入环口开始走了 k 圈,快指针 2k 圈,刚好为整数,意味着相遇点再走 a 步,就是入环口

也就是说,相遇后,我们可以让一个新指针从头节点出发,让慢指针从相遇点出发,二者相遇的点就是入环口。因为慢指针差 a 步到相遇点,而 a 的含义就是头节点到入环口的步数

class Solution { public int findDuplicate(int[] nums) { int slow = 0, fast = 0; // 0必定不在环上,因为入度为0 while(true) { slow = nums[slow]; // slow = slow.next fast = nums[nums[fast]]; // fast = fast.next.next if(fast == slow) { break; } } int head = 0; while(slow != head) { slow = nums[slow]; head = nums[head]; } return slow; } }

相关新闻

  • 光学仿真的终极武器:Python RCWA项目完全指南
  • 2026 合肥二手奢侈包行情看涨,包河区易奢福鉴定师支招:别清洗!原汁原味反而卖得高 - 奢侈品回收实体店
  • 半导体mes厂家的封测MES系统OEE计算模型与设备稼动率分析方法

最新新闻

  • 亲身到店探访成都劳力士官方售后服务中心|详细地址与客服电话(2026年7月最新) - 劳力士服务中心
  • 2026 年新消息:屯留知名的摄影培训班品牌综合实力解析,普通人如何用手机拍出大片?揭秘高效摄影学习路径 - 行业推荐官[官方】--
  • 2026 年舟山靠谱的公共小便池疏通施工公司怎么联系,别让堵塞毁了公共空间,这招秒杀所有难题 - 实业推荐官【官方】
  • 厦门爱彼回收价格查询与各大回收平台实测排行(2026年7月最新数据) - 尊奢回收二奢平台
  • 2026惠州企业采购人才培养:CPPM认证培训供应商怎么选? - 企智芯
  • 2026年7月景观路灯/太阳能路灯供应商实力榜_内蒙古晨锦照明有限公司 - 品牌宣传支持者

日新闻

  • 百达翡丽官方服务项目及价格查询|维修地址与电话权威信息通告(2026年7月最新) - 百达翡丽服务中心
  • 2026年药食同源冲泡饮品哪家好:衡身堂三伏天内调外养 - 晚香时候
  • 芝柏官方更换原装表带价格查询|详细地址与24小时客服电话权威信息公告(2026年7月最新) - 亨得利官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号