解题思路
首先想到的方法是数组,但是数组太耗费时间,所以最后用了哈希表,根据哈希表的特征,可以统计出每个数字出现的次数,但是哈希表不能根据自己的value来排序,所以使用vector<pair<int,int> > 来完成排序。
代码
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(pair<int,int>a,pair<int,int>b){
if(a.second==b.second){
return a.first<b.first;
}
return a.second>b.second;
}
int main(){
int n;
cin>>n;
map<int,int> m;
int t;
for(int i=0;i<n;i++){
cin>>t;
++m[t];
}
vector<pair<int,int> > res(m.begin(),m.end());
sort(res.begin(),res.end(),cmp);
for(vector<pair<int,int> >::iterator it1=res.begin();it1!=res.end();it1++){
cout<<it1->first<<" "<<it1->second<<endl;
}
return 0;
}