[LeetCode力扣hot100]-堆
215. 数组中的第K个最大元素 - 力扣(LeetCode)**高频
典型的Top K问题,(第一遍做是快排+输出,有点太取巧了肯定不行,时间复杂度也不符合O(n))
此题可用小顶堆,小顶堆的特点是父节点<子节点,所以最后根节点是最小的节点,只需要维持一个规模大小为k的小顶堆即可。最后的根节点就是整个数组的第K大的元素。
当小顶堆满(大于等于)的时候。遍历插入时,插入的数据和堆顶(即根节点)对比即可。
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
priority_queue<int,vector<int>,greater<int>> minHeap;//小顶堆
for(int i=0;i<nums.size();i++){
if(minHeap.size()>=k){
if(minHeap.top()<nums[i]){
minHeap.pop();
minHeap.push(nums[i]);
}
}else{
minHeap.push(nums[i]);
}
}
return minHeap.top();
}
};
347. 前 K 个高频元素 - 力扣(LeetCode)