寻找重复数

class Solution {

public:

int findDuplicate(vector<int>& nums) {

//从索引 0 出发,按照 nums[i] 跳转,由于值在 1 到 n 之间,不会越界。

// 因为有重复数字,所以至少有两个不同的索引会指向同一个值(即同一个后继节点),从而形成环。

// 重复的数字就是环的入口

if(nums.size()<2)return -1;

int slow=nums[0],fast=nums[nums[0]];

while(slow!=fast){

slow=nums[slow];

fast=nums[nums[fast]];

}

slow=0;

while(slow!=fast){

slow=nums[slow];

fast=nums[fast];

}

return fast;

}//1 2 3 3 4

};

相关推荐
IronMurphy6 小时前
【算法四十三】279. 完全平方数
算法
墨染天姬6 小时前
【AI】Hermes的GEPA算法
人工智能·算法
papership6 小时前
【入门级-数据结构-3、特殊树:完全二叉树的数组表示法】
数据结构·算法·链表
smj2302_796826526 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
山甫aa7 小时前
差分数组 ----- 从零开始的数据结构
数据结构
早日退休!!!7 小时前
《数据结构选型指南》笔记
数据结构·数据库·oracle
Beginner x_u7 小时前
链表专题:JS 实现原理与高频算法题总结
javascript·算法·链表
丑八怪大丑7 小时前
Java数据结构与集合源码
数据结构
_深海凉_10 小时前
LeetCode热题100-寻找两个正序数组的中位数
算法·leetcode·职场和发展
踩坑记录11 小时前
leetcode hot100 寻找两个正序数组的中位数 hard 二分查找 双指针
leetcode