Description
给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。
Input
第1行一个正整数n。
第2行n个正整数用空格隔开。
Output
一行一个正整数表示那个众数。
Sample Input
5
3 2 3 1 3
3 2 3 1 3
Sample Output
3
HINT
100%的数据,n<=500000,数列中每个数<=maxlongint。
zju2132 The Most Frequent Number
题解
这道题空间只给你1MB,所以肯定是一道思维题
我们考虑到众数出现次数大于n/2,所以我们能想到用一个数和它不相等的数相抵消(这个数大于n/2所以可以把其他数都抵消掉)
ans刚开始的时候等于第一个数
读进来一个数,我们判断一下和当前的ans比较,如果不同 这个数的次数-1,再判断是否为0,如果为0就把当前这个数赋值到ans上 如果相同的话次数就+1
最后的答案就是ans
1 #include<cstdio> 2 using namespace std; 3 int n,x,ans,num; 4 int main(){ 5 scanf("%d",&n); 6 while (n--){ 7 scanf("%d",&x); 8 if (!num) ans=x; 9 if (x!=ans) num--; else num++; 10 if (!num) ans=x; 11 } 12 printf("%d ",ans); 13 return 0; 14 }