找到一个重复元素 - 面试题

来源:互联网 发布:国际js舞蹈培训好不好 编辑:程序博客网 时间:2024/05/29 16:58

对于n个元素,每一个数据的范围[0,n-1],找到一个重复元素,空间O(1),时间O(n)

解法一:

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>using namespace std;int radix_sort (int *arr, int num) {int temp;for (int i = 0;i < num;i++) {while (i != arr[i]) {if (arr[i] == arr[arr[i]]) {return arr[i];}temp = arr[arr[i]];arr[arr[i]] = arr[i];arr[i] = temp;}}return -1;}int main (void) {int num;int arr[100];while (scanf ("%d", &num) != EOF) {for (int i = 0;i < num;i++) {scanf ("%d", &arr[i]);}int flag = radix_sort (arr, num);if (flag == -1) {printf ("No repeating elements\n");}else {printf ("Repeating elements: %d\n", flag);}}return 0;}

方法二:

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>using namespace std;int RepeatNum (int *arr, int num) {for (int i = 0;i < num;i++) {int index = arr[i] >= num ? arr[i]-num : arr[i];if (arr[index] >= num) {return index;}else {arr[index] += num;}}return -1;}int main (void) {int num;int arr[100];while (scanf ("%d", &num) != EOF) {for (int i = 0;i < num;i++) {scanf ("%d", &arr[i]);}int flag = RepeatNum (arr, num);if (flag == -1) {printf ("No repeating elements\n");}else {printf ("Repeating elements: %d\n", flag);}}return 0;}


0 0