题目描述
传送门
题目大意:给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。
题解
出现次数超过n/2,如果把是众数的位置看成是1,非众数的位置看成是-1,两相抵消,抵消不掉的一定是众数。
代码
#include<cstdio>
using namespace std;
int main()
{
freopen("a.in","r",stdin);
freopen("my.out","w",stdout);
int n;
scanf("%d",&n);
int ansx=0,cnt=0;
for (int i=1;i<=n;i++) {
int x; scanf("%d",&x);
if (x==ansx) cnt++;
else if (!cnt) ansx=x;
else cnt--;
}
printf("%d\n",ansx);
}