您的位置:首页 > 职场人生

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

2015-09-05 19:46 661 查看
对于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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: