查找至少一个重复元素
题目描述
一个大小为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 }