第三遍书写主要错误汇总:
1.定义完比较器直接写return了 忘记加bool operator()了
2.小顶堆定义时少了">"
3.pri弹出的元素是一个二维的量不能直接用top赋值给result 需要加top().first,来取出对应的键。
class Solution {
public:
struct comparison{
bool operator()(const pair<int,int>& lhs,const pair<int,int>& rhs){
return lhs.second > rhs.second;
}
};
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> fre;
for(int i = 0;i < nums.size();i++){
fre[nums[i]]++;
}
priority_queue<pair<int,int>,vector<pair<int,int>>,comparison> pri;
for(unordered_map<int,int>::iterator it = fre.begin();it != fre.end();it++){
pri.push(*it);
if(pri.size() > k){
pri.pop();
}
}
vector<int> result(k);
for(int i = 0;i < k;i++){
result[i] =pri.top().first;
pri.pop();
}
return result;
}
};