很多人拿到这道题就会想到利用一个计数器count,记录第一个元素value,将count=1;如果遍历数组遇到和value相等的count++,否则count–;
int find(int* a, int n){
if (a == NULL){
return -1;
}
int value = a[0];
int count = 1;
for (int i = 1; i < n; i++){
if (value == a[i]){
count++;
}
else{
count--;
if (count < 0){
value = a[i];
count = 1;
}
}
}
return value;
}
但是一般的排布可以解决,例如a[]={2,3,2,4,2,5,2,6,2,7},期望输出2,但是结果错误,这是有BUG的,所以我认为可以a[0]=value,然后和后面的元素比较,相等计数器++,最后判断count的值即可如果不满足条件跳出第二重循环,value=a[1]以此类推。
#include<iostream>
using namespace std;
int find(int* a, int n){
if (a == NULL){
return -1;
}
for (int i = 0; i < n; i++){
int value = a[i];
int count = 1;
for (int j = 0; j < n; j++){
if (a[j] == value){
count++;
}
}
if (count >= n / 2){
return value;
}
continue;
}
return -1;
}
int main(){
int a[] = { 2, 3, 2, 4, 5, 2, 6, 2, 7 ,2};
int ret = find(a, sizeof(a) / sizeof(a[0]));
cout << ret << endl;
system("pause");
return 0;
}