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

面试题7

2016-04-27 16:11 429 查看
给定n个数的数组A,其中超过一半的数为一个定值,在不进行排序的情况下,以最高效的算法找出这个数:int find(int *A,int n)。

#include<stdio.h>
#define N 7

/*val为保存的值,time为该值出现的次数;
如果下一个数字与保存的值相等,则time加1;
如果不相等,则time减1;
当time为0时,对val重新赋值。*/

int find(int *A, int n) {
int time = 0;
int val;
for (int i = 0; i < N; i++) {
if (time == 0) {
val = A[i];
time = time + 1;
}
else {
if (val == A[i]) {
time = time + 1;
}
else {
time = time - 1;
}
}
}
return val;
}

int main() {
int A
= { 1,5,1,1,5,1,2};
int val;
val = find(A, N);
printf("%d\n", val);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: