天天看點

LeetCode_287. Find the Duplicate Number

題目描述:

LeetCode_287. Find the Duplicate Number

思路:根據題目描述,n+1個空間隻有範圍為1~n的整數,是以必定存在重複數值,題目說有且僅有一個重複數值,是以,必定存在環。這裡可以設定快慢指針。

慢指針:

t=nums[0]=1

t=nums[1]=3

t=nums[3]=2

t=nums[2]=4

t=nums[4]=2

t=nums[2]=4

快指針:

t=nums[nums[0]]=3

t=nums[nums[3]]=4

class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        if(nums.size()>1){
            int slow=nums[0];
            int fast=nums[slow];
            while(fast!=slow){
                fast=nums[nums[fast]];
                slow=nums[slow];
            }
            fast=0;//這步幫助了解
            while(fast!=slow){
                fast=nums[fast];
                slow=nums[slow];
            }
            return slow;
        }
        return -1;
    }
};      

繼續閱讀