给定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[N] = { 1,5,1,1,5,1,2};
int val;
val = find(A, N);
printf("%d\n", val);
return 0;
}