给你一个n个数的数列,其中某个数出现了超过n / 2次即众数,请你找出那个数。
100%的数据,n<=500000,数列中每个数<=maxlongint。一定有解
神奇的题目
空间只给了1M 随便开几个数组就爆了
因为题目保证了一定有解 那么那个众数出现的次数是大于n/2次的 那么就可以用下面的这个方法写
#include<bits/stdc++.h>
using namespace std;
int n,a,tot,now;
int main()
{
scanf("%d",&n);
while (n)
{
n--;
scanf("%d",&a);
if (now==a) tot++;//如果这个数是当前认为的众数 那么个数加一
else//如果不是
{
tot--;//个数减一
if (tot<=0)//如果个数减到0个,那么这个数就不是众数
{
tot=1;//个数重新变成1
now=a;//众数改成a(现在输入的这个数)
}
}
}
printf("%d",now);
return 0;
}
很神奇