1.数组中的第K个最大元素:
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
priority_queue<int> q; //堆
for(auto e:nums){
q.push(e);
}
for(int i=0;i<k-1;++i){ //将前k-1个数据出队
q.pop();
}
return q.top();
}
};
2.前K个高频单词:
给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
//统计单词出现次数
map<string,int> countmap;
for(auto e:words){
countmap[e]++;
}
//1.小根堆
//2.用multimap按次数进行排序:默认插入次序左小右大(中序遍历为升序),传入比较器greater改为降序
multimap<int,string,greater<int>> countsort;
for(auto& e:countmap){
countsort.insert(make_pair(e.second,e.first));
}
//将前k个插入到vector中
vector<string> v;
for(auto e:countsort){
if(k==0) break;
v.push_back(e.second);
--k;
}
return v;
}
};