【题意概述】ide
给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。spa
【题解】3d
看起来很水。。然而内存限制只有1Mcode
因此要用一点小技巧blog
由于众数出现的次数超过n/2,因此咱们能够把每一个数和不同的数抵消,最后剩下的数必定就是众数内存
咱们用cnt记录目前的众数出现的次数,当目前的众数与读入的数不同时,将它们抵消;即cnt--;同样时cnt++get
当cnt=0时咱们把当前的数看做众数it
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int n,x,cnt,now; 5 void read(int &k){ 6 k=0; int f=1; char c=getchar(); 7 while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar(); 8 while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar(); 9 k*=f; 10 } 11 int main(){ 12 read(n); 13 while(n--){ 14 read(x); 15 if(cnt==0) now=x; 16 cnt+=x==now?1:-1; 17 } 18 return printf("%d\n",now),0; 19 }