leecode第二百八十七题(寻找重复数)

class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int slow_index= nums[0];
        int quick_index= nums[0];
        do
        {
            slow_index=nums[slow_index];
            quick_index=nums[nums[quick_index]];
        }while(slow_index!=quick_index);//可以理解成一个状态向量机,状态转移过程中一定会有环存在
        
        slow_index = nums[0];
        while (slow_index != quick_index) {//检测环的入口,二者会在环入口处相遇
            slow_index = nums[slow_index];
            quick_index = nums[quick_index];
        }
        
        return slow_index;
    }
};

分析:

不太好理解。

posted @ 2019-08-02 12:17  深夜十二点三十三  阅读(85)  评论(0编辑  收藏  举报