题目描述:
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。对于给定的n个自然数组成的多重集S,计算S的众数及其重数 。
输入
输入集合大小n及n个数
输出
输出两行
第一行为众数
第二行为重数样例输入
6 1 2 2 2 3 5样例输出
2 3
#include <iostream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
int num=0;
int sum=0;
int countZS(vector<int> &v,int s,int e){
int n=v.at((s+e)/2);
int counts=0;
for(int i=s;i<e;i++){
if(v[i]==n)
counts++;
}
return counts;
}
int start(vector<int> &v,int s,int e){
int x=0;
for(int i=s;i<e;i++){
if(v.at(i)==v.at((s+e)/2)){
x=i;
break;
}
}
return x;
}
void mode(vector<int> &v,int s,int e){
int tnum=(s+e)/2;
int tsum=countZS(v,s,e);
int left=start(v,s,e);
if(tsum>sum){
sum=tsum;
num=v.at(tnum);
}
if((left+tsum)>sum)
mode(v,left+tsum,e);
if(left>sum)
mode(v,s,left);
}
int main()
{
int n;
int m;
vector<int> v;
cin>>n;
for(int i=0;i<n;i++){
cin>>m;
v.push_back(m);
}
sort(v.begin(),v.end());
mode(v,0,n-1);
cout<<num<<endl;
cout<<sum;
return 0;
}