题目大意:求出数组中第k大的元素
分析:最简单的,sort之后取倒数第k个,这种方法的时间复杂度是O(nlogn),效率不够高。
改进:堆(优先级队列)。采用小顶堆,优先级队列元素按从小到大排列,遍历数组将数组元素插入队列,同时保持队列内元素个数为k个,遍历结束后的队首元素即为答案。也就是保证堆内有k个元素,比他们小的元素都弹出。堆的插入O(logk),插入n次,所以算法的整体时间复杂度为O(nlogk)。
代码:
堆(优先级队列):
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
priority_queue<int,vector<int>,greater<int>> que;
for(int i = 0;i < nums.size();i++){
que.push(nums[i]);
if(que.size() > k) que.pop();
}
return que.top();
}
};