s4553711
12/12/2017 - 2:44 PM

287.cpp

class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int n = nums.size();
        int slow = n;
        int fast = n;
        do {
            //cout << "1> slow: " << slow << ", fast: " << fast << endl;
            slow = nums[slow-1];
            fast = nums[nums[fast-1]-1];
            //cout << "2> slow: " << slow << ", fast: " << fast << endl;
        } while(fast != slow);
        slow = n;
        while(slow != fast) {
            slow = nums[slow-1];
            fast = nums[fast-1];
        }
        return slow;
    }
};