在未排序的数组中找到第 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大小的最小堆;堆中元素个数小于K时候,新元素直接进堆。否则,堆顶元素小于新元素,弹出堆顶,新元素进入。例子: K=2,则最小堆就是2个元素,堆顶为第二大元素,堆底为最大元素.
下面是我的实现代码
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
//思路:二叉堆,最小堆
// 维护一个K大小的最小堆;
//堆中元素个数小于K时候,新元素直接进堆。
// 否则,堆顶元素小于新元素,弹出堆顶,新元素进入。
//例子: K=2,则最小堆就是2个元素,堆顶为第二大元素,堆底为最大元素.
priority_queue<int ,vector<int>,greater<int> > small_head;
int i=0;
int size=nums.size();
while (i<k){
small_head.push(nums[i]);
i++;
}
while(i<size){
if (nums[i]>small_head.top()){
small_head.pop();
small_head.push(nums[i]);
}
i++;
}
return small_head.top();
}
};