1. 程式人生 > >leetcode287 Find the Duplicate Number

leetcode287 Find the Duplicate Number

思路:

轉換成連結串列之後使用floyed判環法。轉換之後重複的那個數字是唯一一個有多個前驅和一個後繼的節點,因此是環的起始節點。

實現:

 1 class Solution 
 2 {
 3 public:
 4     int findDuplicate(vector<int>& nums)
 5     {
 6         int p = nums[0], q = nums[0];
 7         while (true)
 8         {
 9             p = nums[nums[p]];
10             q = nums[q];
11 if (p == q) break; 12 } 13 p = nums[0]; 14 while (true) 15 { 16 if (p == q) break; 17 p = nums[p]; 18 q = nums[q]; 19 } 20 return p; 21 } 22 };