【題意概述】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 }