题目描述:
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和
k = 2
输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和
k = 4
输出: 4
说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
代码:
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
priority_queue<int,vector<int>,greater<int> >q;//从小到大排列
for(auto num:nums){
q.push(num);
if(q.size()>k)
q.pop();
}
return q.top();
}
};
注解:
1.优先队列不写排序方式默认是小顶堆(元素是从大到小排序),top()是取头部元素的意思。
2.优先队列取首部使用top()函数,与栈是一样的。队列取首部使用front()函数(取尾部使用back()函数)。
3.优先队列priority_queue可以存放pair结构,排序方式按pair第一个值排序。
4.访问map下标和值分别用first和second.