给定含有n个元素的多重集合S,每个元素在S中出项的次数称为该元素的重数。多重集S中重数最大的元素称为众数。
例如S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3.
算法一:使用C++STL的map容器关键字作为元素,值为出现发的次数
tip:简单遍历一遍时间复杂度为O(nlgn)map插入时间nlgn
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <map>
using namespace std;
int main()
{
ifstream input("input.txt",ios::in);
ofstream output("output.txt",ios::out);
if (!input)
{
cerr<<"input file could not be opened"<<endl;
exit(1);
}
map<int,int> number_count;
int n;
input>>n;
int data;
while(n--)
{
input>>data;
number_count[data]++;
}
int _max=-1;
auto flag=number_count.begin(),it=number_count.begin();
for(;it!=number_count.end();it++)
{
if(it->second>_max)
{
flag=it;
_max=it->second;
}
}
output<<flag->first<<endl<<flag->second<<endl;
auto rep=++flag;
for(;rep!=number_count.end();rep++)
{
if(rep->second==flag->second)
{
output<<rep->first<<endl<<rep->second<<endl;
}
}
return 0;
}