yyy loves Maths VI (mode)
如果空间正常的话,可以排序,然后找n/2的位置的数
但是...
摩尔投票法,线性的时间复杂度,常量级的空间复杂度,找到数组中出现次数大于一般的数
就是每次找到两个不同的元素消去,直到剩下的都是同一种元素
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 using namespace std; 7 int n,x,h,cnt; 8 int main(){ 9 cin>>n; 10 for(int i=1;i<=n;i++){ 11 cin>>x; 12 if(x==h) cnt++; 13 if(!cnt) h=x,cnt=1; 14 if(x!=h) cnt--; 15 } 16 cout<<h<<endl; 17 }