By
yusijia
Updated:
Contents
一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间。
参考基数排序或桶排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include <cstdio> #include <iostream> #include <cstdlib> #include <cstring> #include <algorithm> #include <vector> #include <stack>
using namespace std;
const int ERROR = -1;
int RadixSort(int arr[], int n) { for(int i = 0; i < n; i++){ while(i != arr[i]){ if(arr[i] == arr[arr[i]]){ return arr[i]; } swap(arr[i], arr[arr[i]]); } } return ERROR; }
int main() { int a[10] = {2, 4, 1, 5, 7, 6, 1, 9, 0, 2}; int result = RadixSort(a, 10); if(result != ERROR){ printf("%d\n", result); }else{ printf("ERROR!\n"); } return 0; }
|