Steward
分享是一種喜悅、更是一種幸福
程式語言 - 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;
}
};