程式語言 - LeetCode - C++ - 287. Find the Duplicate Number



參考資訊:
https://www.cnblogs.com/grandyang/p/4843654.html

題目:


解答一:

class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int ans = 0;

        for (int i = 0; i < 32; ++i) {
            int bit = (1 << i);
            int cnt1 = 0;
            int cnt2 = 0;

            for (int j = 0; j < nums.size(); ++j) {
                cnt1 += !!(bit & j);
                cnt2 += !!(bit & nums[j]);
            }

            if (cnt2 > cnt1) {
                ans += bit;
            }
        }

        return ans;
    }
};

解答二:

class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int slow = nums[0];
        int fast = nums[0];

        do {
            slow = nums[slow];
            fast = nums[nums[fast]];
        } while (slow != fast);

        slow = nums[0];
        while (slow != fast) {
            slow = nums[slow];
            fast = nums[fast];
        }

        return slow;
    }
};