老师,按照您的提示我实现了维护n-k个元素的大根堆的方法。leetcode题目给的原始测试用例nums = [1,1,1,2,2,3], k = 2
通过了,但是提交leecode之后卡在了测试用例nums = [1], k = 1
上,自己调了好一会儿也不得其解。可以请您指导一下我的代码嘛?辛苦您啦!
错误信息:Line 784: Char 17: runtime error: reference binding to null pointer of type 'const struct pair' (stl_iterator.h)
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> record; //(元素,频率)
//遍历数组,录入频率
for(int i = 0; i < nums.size(); i++){
record[nums[i]]++;
}
int n = record.size();
//扫描record。维护当前出现频率最少的n-k个元素
//最大堆。如果当前元素的频率小于优先队列中最大频率元素的频率,则替换
//优先队列中,按频率排序,所以数据对是(频率,元素)形式
priority_queue< pair<int,int> > pq;
for(auto iter = record.begin(); iter != record.end(); iter++){
if((n - k) == pq.size()){ //队列已满
if(iter->second < pq.top().first){
pq.pop();
pq.push(make_pair(iter->second,iter->first));
}
}
else{
pq.push(make_pair(iter->second,iter->first));
}
}
vector<int> result;
while(!pq.empty()){
record.erase(pq.top().second);
pq.pop();
}
for(auto iter : record){
result.push_back(iter.first);
}
return result;
}
};