求数组中是否存在大于一半数量的众数先进行消除法找候选众数res本质上是消除两个不同的数这时候如果存在符合条件的数x那么再怎么两两消除最后也只会剩下resx的情况。然后只需要判断候选是不是众数即可。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; }