UPDATE2023-08-16:更新文章
Description
小明最近在上数学课,老师给小明布置了个作业:在 n 个数里找出所有的众数。
众数的定义是这样的:在所有数当中出现次数最多的数被称为众数。并且根据定义,众数有可能有多个。
你能解决这个问题吗?
Input
第一行一个整数 n。
第二行有 n 个整数,ai表示第i个数。
Output
输出一行,包括一个整数 k,表示众数的个数。
接下来一行包括 k 个整数,每个整数都表示一个众数,并且从小到大输出。
Sample Input
10
3 3 3 2 3 1 2 2 1 2
Sample Output
2
2 3
HINT
数据范围
40%的数据,1<=n<=400
100%的数据,1<=n<=1000000,1<=ai<=1000000000
代码
#include<bits/stdc++.h>
using namespace std;
long long p[1000001],ans[100001];
int main()
{
int n,m=0,a=0,b=0,c=p[0];
cin>>n;
for(int i=0;i<n;i++)
cin>>p[i];
sort(p,p+n);
for(int i=0;i<n;i++)
{
if(c!=p[i])
{
c=p[i];
a=0;
}
else a++;
if(a>b)
{
b=a;
m=0;
}
if(c==p[i]&&a==b)
{
ans[m]=p[i];
m++;
}
}
cout<<m<<endl;
for(int i=0;i<m;i++)
{
cout<<ans[i]<<' ';
}
return 0;
}