欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode287:Find the Duplicate Number

程序员文章站 2022-04-15 14:42:12
...

leetcode287:Find the Duplicate Number

因为有时间复杂度和空间复杂度的限制,不能用集合和排序的方法,此处用循环检测的方法,存在唯一重复的数,数的范围在1——n,那么存在指向相同数字的索引(环的入口处),利用环检测的方法找出环的入口位置。

class Solution {
    public int findDuplicate(int[] nums) {
        int slow = 0;
        int fast = 0;
        slow = nums[slow];
        fast = nums[nums[fast]];
        while (slow != fast) {
            slow = nums[slow];
            fast = nums[nums[fast]];
        }
        fast = 0;
        while (fast != slow) {
            fast = nums[fast];
            slow = nums[slow];
        }
        return fast;
    }
}