求数组中是否存在大于一半数量的众数
先进行消除法找候选众数res,本质上是消除两个不同的数,这时候如果存在符合条件的数x,那么再怎么两两消除最后也只会剩下res=x的情况。
然后只需要判断候选是不是众数即可。
bool cal() { // 找候选众数 int cnt = 0, res = -1; for(int i = 0; i < n; i ++) { if(cnt == 0) { res = a[i], cnt = 1; continue; } if(a[i] == res)cnt ++; else cnt --; } // 判断是否是众数 cnt = 0; for(int i = 0; i < n; i ++) if(a[i] == res)cnt ++; return cnt > n / 2; }