C++开发:手写代码用优先队列实现无序数组查找第top k元素
这是一个常见的问题,可以使用优先队列(堆)来解决。以下是一个简单的C++实现: ```cpp #include <iostream> #include <vector> #include <queue> using namespace std; class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; vector<int> res; for (int num : nums) { pq.push({-1 * count(nums.begin(), nums.end(), num), num}); if (pq.size() > k) { pq.pop(); } } while (!pq.empty()) { res.push_back(pq.top().second); pq.pop(); } reverse(res.begin(), res.end()); return res; } }; ``` 在这个解决方案中,我们首先创建一个优先队列,其中每个元素都是一个pair,第一个元素是元素的频率,第二个元素是元素本身。我们使用一个负数来表示频率,这样我们就可以使用greater比较器来确保频率最高的元素在队列的顶部。 然后,我们遍历输入数组,对于每个元素,我们将其添加到队列中,并检查队列的大小是否超过了k。如果是,我们就从队列中删除一个元素,这样队列中就只包含前k个最常见的元素。 我们从队列中删除所有元素,并将它们添加到结果向量中。由于我们首先添加的是频率最高的元素,所以结果向量中的元素就是前k个最常见的元素。 ######[AI写代码神器 | 329点数解答 | 2023-11-09 00:48:43]
- C++:用自定义双栈实现中缀表达式到后缀表达式的转换(阿里通义 | 877点数解答 | 2024-10-18 02:23:48)273
- C 代码实现二叉树节点栈及操作,三大关键逻辑点需注意!(字节豆包 | 95点数解答 | 2024-12-10 13:17:25)235
- C++:用一维数组实现双栈,含入栈出栈及边界处理代码(字节豆包 | 543点数解答 | 2024-11-29 09:50:17)280
- C++:用一维数组实现双栈的代码解析与示例(GPT | 643点数解答 | 2024-11-29 10:01:30)283
- 双栈实现:`push` 与 `pop` 函数代码解析及开发注意要点(字节豆包 | 637点数解答 | 2025-11-05 14:11:09)90
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)345
- C#工程师必知:数组、链表、哈希、队列、栈数据结构优缺点大揭秘! (百度文心 | 561点数解答 | 2023-11-09 17:56:30)264
- "Unveiling the Secrets of a Basic HTML Document with Absolute Positioning"(GPT | 196点数解答 | 2024-05-28 15:49:16)2258
- HTML代码:打造三字母动画黑页面及优化、注意要点揭秘 (DeepSeek | 172点数解答 | 2025-05-11 19:18:28)186
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)16
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)314
- 揭秘!十进制整数转其他进制用啥存储结构最合适?答案竟是它!(字节豆包 | 57点数解答 | 2024-11-13 01:21:11)236