news 2026/5/1 6:51:52

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

作者头像

张小明

前端开发工程师

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/4/28 13:48:05

GitFlow工作流实践

文章目录 前言一、什么是GitFlow&#xff1f;二、GitFlow分支解析三、GitFlow工作流程 前言 版本控制是软件开发中重要的工作场景&#xff0c;而git作为目前主流的分布式版本控制系统&#xff0c;如何高效准确的使用是一个难题&#xff0c;本文介绍了一种gitflow工作流&#x…

作者头像 李华
网站建设 2026/5/1 14:50:40

16、构建与GNU Make的常见问题及算术实现

构建与GNU Make的常见问题及算术实现 在软件开发过程中,构建系统的效率和功能对于项目的顺利推进至关重要。本文将探讨一些构建相关的常见问题,以及如何利用GNU Make实现算术功能,甚至构建一个简单的计算器。 处理器数量与构建加速 在小型构建任务中,处理器数量对构建速…

作者头像 李华
网站建设 2026/4/18 8:54:50

贪吃蛇的java代码实现

实验六&#xff1a;贪吃蛇bodyObjpackage snake;import java.awt.*;public class bodyObj extends GameObj {public bodyObj(Image imd, int x, int y, GameWin frame) {super(imd, x, y, frame);}public void paintSelf(Graphics g) {super.paintSelf(g);} }FoodObjpackage sn…

作者头像 李华
网站建设 2026/4/22 3:42:33

打开软件出现找不到vcruntime140d.dll文件的情况 下载修复解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/24 20:42:31

leetcode 困难题 745.Prefix and Suffix Search 前缀和后缀搜索

Problem: 745. Prefix and Suffix Search 前缀和后缀搜索 解题过程 ASCII内&#xff0c;"{"刚好在"z"后面&#xff0c;所以算是特殊字符&#xff0c;按照提示拼起来&#xff0c;然后放入到字典树当中去&#xff0c;并且在{后面的前缀需要求出最大的索引 查…

作者头像 李华