思路
|
給定數組 ,重複的數字為 , 因為
比如現在從 再看到數字 ,來到 由於有重複數字的存在,最後會進入一個迴圈,重複的數字,就是環的起點。 找環起點的算法在 142. 環形鏈表 II 有提到。 |
|
程式碼
快慢指針
class Solution {
public:
int findDuplicate(vector<int>& nums) {
int slow = nums[0], fast = nums[nums[0]];
while(slow != fast) {
slow = nums[slow];
fast = nums[nums[fast]];
}
slow = 0;
while(slow != fast) {
slow = nums[slow];
fast = nums[fast];
}
return slow;
}
};
複雜度分析
- 時間複雜度:
- 空間複雜度:
