news 2026/7/13 14:07:10

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

作者头像

张小明

前端开发工程师

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/7/13 8:50:21

10.8 总结

10.8 总结 作业回顾 1.1 索引练习节选 s hello 1 world 2 hello 3 Python # 获取s的长度 print(len(s)) # 30 # 获取第4个字符 print(s[3]) # l # 获取最后一个字符 print(s[-1]) # n # 获取第7个字符 print(s[6]) # 1 # 获取倒数第7个字符 print(s[-7]) # 空格【不显…

作者头像 李华
网站建设 2026/7/9 7:32:23

列车售票|基于springboot 列车售票系统(源码+数据库+文档)

列车售票目录 基于springboot vue列车售票系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue列车售票系统 一、前言 博主介绍&#xff1a;✌️大厂…

作者头像 李华
网站建设 2026/7/13 7:34:05

AI驱动的手动测试变革:赋能而非替代

随着大语言模型和智能自动化技术的飞速发展&#xff0c;软件测试领域正迎来前所未有的变革浪潮。传统手动测试作为软件质量保障的基石&#xff0c;面临着效率提升与价值重塑的双重挑战。 AI时代手动测试的困境与机遇 传统手动测试的局限性 手动测试长期面临着测试覆盖率低、…

作者头像 李华
网站建设 2026/7/13 3:08:09

【奶茶Beta专项】【LVGL9.4源码分析】09-core-group

【奶茶Beta专项】【LVGL9.4源码分析】09-core-group焦点组管理1 概述1.1 文档目的1.2 代码版本与范围2 设计意图与总体定位2.1 为什么需要 lv_group2.2 lv_group 在架构中的位置2.3 与全局输入/焦点状态的关系3 使用方式与典型 DEMO3.1 创建 group 并绑定编码器输入3.2 在菜单/…

作者头像 李华