https://darkbzoj.tk/problem/2456
题意:给你一个n个数的数列,其中某个数出现了超过n/2次即众数,请你找出那个数。
思路:空间为1M,不能开数组,否则可以排个序O(nlogn)。
有一个神奇的方法,把每个数和一个与它不同的数相抵消,题目保证有解,那么最后结果就是正确的,题目不保证的话,还要扫一遍数组验证一下是不是真的出现至少n/2次。
#include<cstdio>
int n,x,t,cnt;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(x==t)cnt++;
else if(cnt)cnt--;
else t=x,cnt=1;
}
printf("%d\n",t);
return 0;
}