酷代码 AI
菜单
服务商

作为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个最常见的元素。 [2023-11-09 00:48:43 | AI写代码神器 | 329点数解答]

相关提问
请收藏新域名:pdcd.cn
发财导航,免费问AI
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]