LeetCode 287 寻找重复数

LeetCode 287 寻找重复数

🟠 中等偏上

https://leetcode.cn/problems/find-the-duplicate-number/description/

看成循环链表

class Solution {

public:

    int findDuplicate(vector<int>& nums) {

        // 下标是本节点的地址,也是val,nums[i] 存的是下一个数的地址(下标)

        int slow = 0;

        int fast = 0;

        while(true){

            slow = nums[slow];

            fast = nums[nums[fast]];

            if(slow == fast){

                break;

            }

        }

        fast = 0;

        while(fast!=slow){

            slow = nums[slow];

            fast = nums[fast];

        }

        return slow;

    }

};