查找至少一个重复元素

 

题目描述

  一个大小为n的数组,里面的数都属于范围[0,n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间复杂度和O(n)时间复杂度。

解法分析:

  具体代码如下所示。

 1 #include <iostream>
 2 #include <assert.h>
 3 using namespace std;
 4 
 5 //
 6 int FindDuplicate(int array[], int n)
 7 {
 8     assert(array != NULL && n >= 2);
 9     
10     int i = 0;
11     while(i < n)
12     {
13         while(array[i] != i)
14         {
15             if(array[i] == array[array[i]])
16             {
17                 return array[i];
18             }
19             else
20             {
21                 swap(array[i], array[array[i]]);
22             }
23         }
24         i++;
25     }
26     return -1;
27 }
28 
29 int main()
30 {
31     //simple test
32     int array[] = {0,1,2,3,4,5,6,7,8,8};
33     cout << FindDuplicate(array, sizeof(array)/sizeof(int)) << endl;
34     return 0;
35 }

 

posted @ 2013-11-29 16:23  虔诚的学习者  阅读(176)  评论(0编辑  收藏  举报