Description
给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。
Input
第1行一个正整数n。
第2行n个正整数用空格隔开。
Output
一行一个正整数表示那个众数。
Sample Input
5
3 2 3 1 3
Sample Output
3
分析
众数抵消的思想
AC代码
/*
题目给出
众数的个数大于n / 2
利用众数的个数必定大于其他数的个数总和来抵消
*/
#include <cstdio>
using namespace std;
int i,n,a,cnt=0,y=0;
int main(){
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d",&a);
if (y!=a)
{
if (cnt==0) {cnt=1,y=a;}
else cnt--;
}
else cnt++;
}
printf("%d",y);
return 0;
}