美文网首页
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