中兴笔试排序题求解答
给定一组数,按照数组中出现的次数依次从大到小排序,出现次数一样的按照数组中的先后顺序输出 比如:输入:1 1 1 1 3 3 3 4 5 2 6 6 6 6 6输出:6 6 6 6 6 1 1 1 1 3 3 3 4 5 2
求代码共享!
我的输出:
6 6 6 6 6 1 1 1 1 3 3 3 5 4
2
我知道是map底层排序不稳定排序的原因,但是不知道怎么解决,求解决!
代码如下:
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(pair<int, int> lhs, pair<int, int>rhs)
{
return lhs.second>rhs.second;
}
int main()
{
while (1)
{
vector<int> vec;
map<int, int> m;
int num;
cout << "输入数组元素的个数:";
cin >> num;
//输入数组并计数
int i;
for (i = 0; i<num; i++)
{
int temp;
cin >> temp;
vec.push_back(temp);
if (m.find(temp) == m.end())
m.insert(make_pair(temp, 1));
else
m[temp]++;
}
vector<pair<int,int> > res;
for (i=0;i<num;i++)
{
if(find(res.begin(),res.end(),make_pair(vec[i],m[vec[i]]))==res.end())
res.push_back(make_pair(vec[i],m[vec[i]]));
}
stable_sort(res.begin(),res.end(),compare);
for(vector<pair<int,int> >::iterator it=res.begin();it!=res.end();it++)
for(i=0;i<it->second;i++)
cout<<it->first<<" ";
cout<<endl;
}
return 0;
}
OPPO公司福利 1056人发布
查看9道真题和解析