题目
题解
分析
题目大意:数组中若有m个相同元素的值为x,m>数组中元素个数的一半,则x为主元素。
找出最大个数的相同元素
1. 利用辅助数组
创建动态辅助数组,将A数组中元素的值作为辅助数组下标,在A数组中每遍历到相同的元素,将辅助数组对应下标的元素+1,遍历完成后辅助数组元素的值即为个数。
2. 假设元素为主元素
代码
int majElem(int A[], int n){
int x,m=0,*p;
p = (int *)malloc(n*sizeof(int));
for(int i=0;i<n;i++){
p[i] = 0;
} //计数器清0
for(int j=0;j<n;j++){
p[A[j]]++;
if(p[m]<p[A[j]]) m=A[j];
} //计数
if(p[m]>2/n) return m;
else return -1;
}