【发布时间】:2020-07-02 15:09:02
【问题描述】:
下面是从数组中获取前 K 个频繁元素的代码。代码是正确的,但我对比较器在这里做什么感到困惑。为什么它是“p1.second > p2.second”而不是“p1.second”。 second
class Solution {
struct compare {
bool operator() (pair<int, int>p1, pair<int, int>p2) {
return p1.second > p2.second;
}
};
公开: 向量 topKFrequent(vector& nums, int k) {
int n = nums.size();
unordered_map<int, int>m;
for (int i = 0; i < n; i++) {
m[nums[i]]++;
}
priority_queue<pair<int, int>, vector<pair<int, int>>, compare>pq;
for (auto it = m.begin(); it != m.end(); it++) {
pq.push(make_pair(it->first, it->second));
if (pq.size() > k)
pq.pop();
}
vector<int>v;
while (!pq.empty()) {
pair<int, int>p = pq.top();
v.push_back(p.first);
pq.pop();
}
return v;
**}
};**
【问题讨论】:
-
计数较少的对不应该是堆顶的那个 为什么最低的会在顶部?队列的顶部是下一个要走的元素,应该是具有最高 priority 的元素
标签: c++ algorithm data-structures priority-queue