已知一个整数序列A={a1, a2, a3, ..., a(n - 1)}。若存在一个数出现的次数大于整个整数序列个数的一半,则称这个数为该整数序列的主元素。
例如A = {0, 2, 2, 3, 2, 2, 3, 6, 7, 2, 2},则2为序列A的主元素;又例如A = {0, 2, 2, 3, 2, 2, 3, 6, 7, 2},则A中没有主元素。
输入
输入由多组数据组成。
每组数据由二行组成,第一行是整数n(1<=n<=100000), 第二行是n个空格分开的整数,它们的值位于区间[0,1000000000]。
题目保证60%的数据n的值不超过20。
输出
每一组输入数据输出一行。如果存在满足条件的x,则输出,否则输出-1。
样例输入
3 3 2 3 8 0 5 5 3 5 7 5 5 8 0 5 5 3 5 1 5 7
样例输出
3 5 -1
#include<stdio.h>
int get(int A[], int n);
int main()
{
int n, a[100000];
while(scanf("%d", &n)!=EOF)
{
for(int j = 0; j < n; j++)
scanf("%d", &a[j]);
printf("%d\n",get(a, n));
}
return 0;
}
int get(int A[], int n)
{
int result, cnt;
result = A[0];
cnt = 1;
for(int i=1; i<n; i++)
{
if(A[i] == result)
cnt++;
else if(cnt == 1)
result = A[i];
else
cnt--;
}
cnt=0;
for(int i=0; i<n; i++)
{
if(A[i]==result)
cnt++;
}
if(cnt>(n/2))
return result;
else
return -1;
}