一:解题思路
用快慢指针法来解决这道题。
Time:O(n),Space:O(1)
二:完整代码示例 (C++版和Java版)
C++:
class Solution { public: int findDuplicate(vector<int>& nums) { int slow = nums[0]; int fast = nums[nums[0]]; while (fast != slow) { slow = nums[slow]; fast = nums[nums[fast]]; } int p = 0; while (p != slow) { slow = nums[slow]; p = nums[p]; } return slow; } };
Java:
class Solution { public int findDuplicate(int[] nums) { int fast=nums[nums[0]]; int slow=nums[0]; while (fast!=slow) { slow=nums[slow]; fast=nums[nums[fast]]; } int p=0; while (p!=slow) { slow=nums[slow]; p=nums[p]; } return slow; } }