题目
设计算法找出主元素,找不到返回-1
如果一个数组A[1…n]中超过半数的元素都相同时,该数组被称为含有主元素
算法思路
用时间复杂度换空间复杂度
①设置一个长度为n,元素都为0的数组B
②根据B[A[i-1]]++,得到一个新的B数组,并且进行遍历检查
③max=0 ,通过遍历,找到max最大的时候 并且确定max位置
④最后+1,输入这个位置对应的元素!!!
代码展示
int fun(int A[],int n ){
int B*=(int*)malloc(sizeof(int)*n)
for (i =0 ;i<n ;i++ )
B[i]=0;
int i , k;
int max=0 ;
for (i =0 ; i<n ;i++ )
if(A[i]>0 && A[i]<=n)
B[A[i]-1]++;
for(i=0; i<n; i++){
if(B[i]>max)
max=B[i];
k=i; //找到k的这个位置
}
if(max>n/2)
return k+1; //输入k的这个元素
else
return -1;
}