王道 数据结构 p17 第12题
#include<iostream>
#define InitSize 100
#define arrLen 5
using namespace std;
//法二:次次次优解 在算法书写正确以及时间复杂度分析正确情况下会被扣3分
/*void mySwap(int &x,int &y)//交换两元素
{
int temp=x;
x=y;
y=temp;
}
int Majority(int A[],int n)
{
for(int i=0;i<n-1;i++)//直接选择排序
{
int minNum=i;
for(int j=i+1;j<n;j++)
{
if(A[j]<A[minNum])
minNum=j;
}
mySwap(A[i],A[minNum]);
}
int count=1,max=0,flag=0;
for(int i=0;i<n;i++)
{
if(A[i]==A[i-1])
{
count++;
if(max<count)
{
max=count;
flag=A[i];
}
}
else
count=1;
}
if(max>n/2)
return flag;
else
return -1;
}*/
//费时费力且得分不高 这种方法是万不得已用 直接选择排序 时间复杂度O(n2),空间复杂度O(1)
//法一 次优解 在算法书写正确以及时间复杂度分析正确情况下会被扣1分
int Majority(int A[],int n){
int B[n],i=0;
for(i=0;i<n;i++)
{
B[i]=0;//必须初始化B数组
}
for(i=0;i<n;i++)
{
B[A[i]]++;
}
for(i=0;i<n;i++)
{
if(B[i]>n/2)
return B[i];
}
if(i>=n)
return -1;
}
//时间复杂度O(n),空间复杂度O(1)
int main(){
int A[]={0,5,5,3,5,7,5,5};
int B[]={0,5,5,3,5,1,5,7};
cout<<"主元素是"<<Majority(A,8);
}