找到数组中出现频率前k高的元素C++
时间: 2024-11-30 22:18:58 浏览: 26
在C++中,找到数组中出现频率前k高的元素通常可以使用哈希表(unordered_map)配合优先队列(priority_queue)来实现。以下是简单的步骤:
1. **统计频率**:
- 使用一个哈希表`freq_map`存储每个元素及其出现的次数。
- 遍历数组,更新`freq_map`。
2. **构建堆**:
- 创建一个优先队列`pq`,默认按照元素频率降序排列。
- 对于`freq_map`,将每个元素作为键值对`(value, key)`添加到堆中,这里`value`是频率,`key`是元素。
- 如果堆的大小超过`k`,弹出堆顶元素(频率最低的元素)。
3. **查找前k高频率元素**:
- 当遍历完`freq_map`后,堆`pq`中就包含了前k个频率最高的元素。由于堆是从小到大排序的,所以堆顶的元素就是频率最高的。
- 可以直接从堆中获取这k个元素,它们即为所求。
下面是一个简化版的伪代码示例:
```cpp
#include <unordered_map>
#include <queue>
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> freq_map;
for (int num : nums) {
freq_map[num]++;
}
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
for (const auto& [num, freq] : freq_map) {
pq.push({freq, num});
if (pq.size() > k) {
pq.pop();
}
}
vector<int> result(k);
for (size_t i = 0; i < k; ++i) {
result[i] = pq.top().second;
pq.pop();
}
return result;
}
```
阅读全文