哈希表+堆
借鉴了这个博客
大根堆O(nlogn)
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> hash;
priority_queue<pair<int, int>> heap;
vector<int> result;
for(int num:nums) {
hash[num]++;
}
for(auto item:hash) {
heap.push(make_pair(item.second, item.first));
}
for(int i=0; i<k; i++) {
result.push_back(heap.top().second);
heap.pop();
}
return result;
}
};
小根堆O(nlogk)
class Solution {
typedef pair<int, int> dataType;
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> hash;
priority_queue<dataType, vector<dataType>, greater<dataType> > heap;
vector<int> result;
for(int num:nums) {
hash[num]++;
}
for(auto item:hash) {
heap.push(make_pair(item.second, item.first));
if(heap.size() > k) heap.pop();
}
while(!heap.empty()) {
result.push_back(heap.top().second);
heap.pop();
}
return result;
}
};
逻辑不难,就是用到了很多东西:
1.unordered_map
2.priority_queue:默认大根堆;第二个参数是容器,第三个是比较函数 https://www.cnblogs.com/Deribs4/p/5657746.html
.size() .empty() .push() .top() .pop() 类似于栈
3.pair<int, int> make_pair(a, b)
4.deftype
5.auto
6.for的:操作符