1.王道书的去不同方法
2.运用辅助数组
#include <stdio.h>
#include <stdlib.h>
void findnum(int A[], int n) {
int B[n]; //声明一个辅助数组
for (int i = 0; i < n; i++) {
B[i] = 0; // 初始化
}
for (int i = 0; i < n; i++) {
B[A[i]]++; // 统计数组A中每个元素出现的次数,并将结果保存在数组B中。
}
int count = 0, index = 0; // count计数,index表示下标,遍历B数组,找到出现次数最多的元素,并记录其出现次数和下标。
for (int i = 0; i < n; i++) {
if (B[i] > count) {
count = B[i];
index = i;
}
}
if (count > n / 2) {
printf("主元素是:%d\n", index);
} else {
printf("-1\n");
}
printf("数组B的元素为:");
for (int i = 0; i < n; i++) {
printf("%d ", B[i]);
}
}
int main(){
int A[]={3,5,3,3,2,5,3};
int n=sizeof(A)/sizeof(int);
findnum(A,n);
return 0;
}
3.运用快排,变为有序数组,统计第n/2个元素在数组中的个数,若>n/2,则其为主元素,返回数值;否则没有主元素返回-1。