c++ 求一个数组的出现最多的数,如果出现出现最多的数有多个,则按从小到大输出
时间: 2024-11-06 17:16:57 浏览: 12
详解C++中的一维数组和二维数组
5星 · 资源好评率100%
在 C++ 中,你可以使用哈希表(如 unordered_map 或 map)以及优先队列(如 priority_queue 或 std::multiset)来解决这个问题。以下是简单的步骤:
1. 首先,遍历整个数组,将每个元素作为键(key),出现次数作为值(value)存储到哈希表中。
2. 然后,创建一个优先队列,这里我们通常使用降序排序,即优先队列中的元素按照值(出现次数)从大到小排列。
3. 再次遍历哈希表,对于每个元素及其出现次数,如果这个次数大于优先队列顶部元素的次数,就更新优先队列,并将当前元素添加进去。
4. 最后,优先队列的顶部元素就是出现次数最多的一个或多个数(因为优先队列已经按次数排序)。如果队列中有多个相同的最大值,那么它们都是并列的最大。
下面是伪代码形式的大致样子:
```cpp
#include <unordered_map>
#include <queue>
std::vector<int> mostFrequent(vector<int>& nums) {
unordered_map<int, int> count;
for (int num : nums) {
count[num]++;
}
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
for (const auto& pair : count) {
pq.push(pair);
while (!pq.empty() && pq.top().first == pair.first) {
if (pair.second > pq.top().second) {
pq.pop();
} else {
break;
}
pq.push(pair);
}
}
vector<int> result;
while (!pq.empty()) {
result.push_back(pq.top().first);
pq.pop();
}
// 如果结果中有多个相同最大值,按升序排列返回
sort(result.begin(), result.end());
return result;
}
```
阅读全文