news 2026/6/10 16:43:22

如何用“龟兔赛跑“找出数组中的重复数?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用“龟兔赛跑“找出数组中的重复数?

求解思路

这道题利用快慢指针的思想。

可以把数组看作一个特殊的链表,数组的值就是指向下一个节点的索引。比如 nums[0] = 3,就表示从索引 0 跳到索引 3。

因为数组中有重复数字,所以必然会形成一个环,就像链表有环一样。

我们的目标就是找到这个环的入口位置,而这个位置对应的数字就是重复的数字。

整个算法分2步走:

第1步用快慢指针找到环内的相遇点,慢指针每次走一步,快指针每次走两步,它们最终会在环内某处相遇;

第2步让快指针回到起点,然后两个指针都以相同速度(每次一步)前进,它们再次相遇的地方就是环的入口,也就是我们要找的重复数字。

代码实现

publicstaticintfindDuplicate(int[]nums){if(nums==null||nums.length<2){return-1;}// 第1步:快慢指针找相遇点intslow=nums[0];intfast=nums[nums[0]];while(slow!=fast){slow=nums[slow];// 慢指针走一步fast=nums[nums[fast]];// 快指针走两步}// 第2步:找环的入口fast=0;// 快指针回到起点while(slow!=fast){fast=nums[fast];slow=nums[slow];}returnslow;// 返回重复的数字}

如果觉得有帮助,欢迎点赞、关注、转发~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 14:11:38

转子动力学:临界转速计算、Workbench建模、模态振型与坎贝尔图

转子动力学之临界转速计算 workbench 建模 模态振型 坎贝尔图在工厂里那台嗡嗡作响的鼓风机又双叒叕出问题了&#xff0c;轴承温度异常升高时老师傅叼着烟说了句&#xff1a;"这转子怕是遇上临界转速了"。要搞懂这个玄学问题&#xff0c;Workbench里藏着不少实用…

作者头像 李华
网站建设 2026/6/9 15:39:41

当AI遇上电影工业:一个让“抽卡式“视频生成彻底翻篇的工程化实践

从剧本到成片,我们如何用关键帧驱动理念重构AI视频生产流程 写在前面的话 说实话,当我第一次看到市面上那些"输入一句话就能生成视频"的AI工具时,内心是激动的。但当我真正尝试用它们做点正经事——比如制作一个30秒的品牌宣传片——我就发现了问题:生成的视频就像开…

作者头像 李华
网站建设 2026/6/3 12:46:20

当AI遇上A股:一个让机器读懂财经新闻的量化框架

"如果你能让机器理解新闻,它就能预测股价。"这听起来像科幻小说,但CSMD项目正在把这个想法变成现实。 一、缘起:股市预测为什么这么难? 周五下午三点,你盯着电脑屏幕上跳动的K线图,心里盘算着下周一该不该加仓。突然,手机推送了一条新闻:"某龙头企业获得重大技…

作者头像 李华
网站建设 2026/6/4 5:14:23

紫薯矮砧密植:水肥一体化系统的铺设要点纪实

红薯地里&#xff0c;老刘的紫薯长势喜人&#xff0c;薯块饱满。"这套水肥系统让我的紫薯产量提高四成&#xff0c;"他指着地里的滴灌设备说&#xff0c;"不仅省水省肥&#xff0c;紫薯品质还特别好。"认识紫薯矮砧密植紫薯矮砧密植&#xff0c;简单来说就…

作者头像 李华
网站建设 2026/6/10 12:25:05

拦截器注册InterceptorRegistry 实现讲解

1.核心概念InterceptorRegistry 是 Spring MVC 提供的拦截器注册器&#xff0c;用于配置拦截器的拦截规则。2.主要方法addInterceptor(): 添加拦截器 addPathPatterns(): 指定要拦截的路径 excludePathPatterns(): 指定要排除的路径 路径匹配规则 /api/**: 匹配 /api/ 下的所有…

作者头像 李华