题目描述:
已知一个整数序列 A =(a 0 ,a 1 ,…, a n-1 ) , 其中0≤ai<n(0≤i<n)。 若存在a p1 =a p2 =…=a pm =x且m>n/2(0≤p k <n,1≤k≤m),则称 x 为 A 的主元素。 例如A= ( 0, 5, 5, 3, 5, 7, 5, 5 ),则 5 为主元素;又如 A= ( 0, 5, 5, 3, 5, 1, 5, 7 ), 则A 中没有主元素。假设 A 中的 n 个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出 A 的主元素。若存在主元素, 则输出该元素;否则输出-1。
算法思想:
1.暴力法。2.摩尔投票法
暴力法核心代码:
int major_element(int a[],int n)
{
for(int i=0;i<n;i++)
{
int Count=0;
int major=a[i];
for(int j=0;j<n;j++)
{
if(a[j]==major)
Count++;
if(Count>n/2)
return a[i];
}
}
return -1;
}
莫尔投票法:
https://mabusyao.iteye.com/blog/2223195