美文网首页
LeetCode 第287题:寻找重复数

LeetCode 第287题:寻找重复数

作者: 放开那个BUG | 来源:发表于2020-06-27 14:27 被阅读0次

1、前言

题目描述

2、思路

思路就是快慢指针,将数组想象成一个环。比如假设有这样一个样例:[1,2,3,4,5,6,7,8,9,5]。如果我们按照上面的循环下去就会得到这样一个路径: 1 2 3 4 5 [6 7 8 9] [6 7 8 9] [6 7 8 9] . . .这样就有了一个环,也就是6 7 8 9。point 会一直在环中循环的前进。

初始时,我们以数组的下表作为指针,然后可以将数组的元素作为指针(毕竟有元素才重复),然后思路就转变成上题中,求环入口处的节点了。

3、代码

class Solution {
    public int findDuplicate(int[] nums) {
        int fast = 0;
        int slow = 0;
        while(true){
            fast = nums[nums[faast]];
            slow = nums[slow];
            if(fast == slow){
                break;
            }
        }

        int finder = 0;
        while(true){
            finder = nums[finder];
            slow = nums[slow];
            if(finder == slow){
                break;
            }
        }
        return slow;
    }
}

相关文章

网友评论

      本文标题:LeetCode 第287题:寻找重复数

      本文链接:https://www.haomeiwen.com/subject/fyraxktx.html