给你一个序列a1,a2...an,每个数单独统计它出现的次数,统计完成后,按照出现次数排序,请你计算出这个序列里出现第一多的数和出现第二多的数的分别出现的次数 出现次数排序中数c在数d前面的定义是数c的出现次数a >= 数d的出现次数b。换言之,假如出现第一多的数c出现的个数为a,出现第二多的数d出现次数为b,(c不等于d)那么ab之间满足a >= b 例如,如果在一个序列中2出现了3次,1也出现了3次,而其他数字出现的次数都小于3,那么我们认为整个序列中出现第一多的数的次数为3,出现第二多的数出现次数也为3 输入 第一行一个正整数t,表示有t组数据 每一组第一行一个正整数n,表示序列长度为n 每一组第二行,输入n个正整数 序列长度最大不超过100,序列中的最大数不会超过100,最小不会小于1 输出 序列当中第一多和第二多的数的个数 C语言
时间: 2024-02-20 10:57:47 浏览: 127
以下是C++的实现代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
bool cmp(const pair<int, int>& a, const pair<int, int>& b) {
return a.second > b.second;
}
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
map<int, int> mp;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
mp[x]++;
}
vector<pair<int, int>> v(mp.begin(), mp.end());
sort(v.begin(), v.end(), cmp);
int a = v[0].second;
int b = 0;
for (int i = 1; i < v.size(); i++) {
if (v[i].second != a) {
b = v[i].second;
break;
}
}
cout << a << " " << b << endl;
}
return 0;
}
```
思路:利用map记录每个数出现的次数,然后将map中的键值对转化为vector进行排序,最后统计第一多和第二多的数出现的次数即可。
阅读全文