leetcode-215. 数组中的第K个最大元素

 

 

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        priority_queue<int, vector<int>, less<int>> maxheap;
        for(int i = 0; i < nums.size(); i++){
            maxheap.push(nums[i]);
        }
        int count = 1;
        while(count <k){
            maxheap.pop();
            count++;
        }
        return maxheap.top();
    }
};

 二刷:简洁版

/*
假设:
nums: [3,2,1,5,6,4] ,k = 2
1. 首先建立一个小根堆;
2. 然后遍历元素,将元素加入堆中。如果当前堆的大小大于KK,弹出堆.(保证堆中是访问过的k个最大元素)
3. 最后取出堆头元素。
最后堆中有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++){
            minheap.push(nums[i]);
            if(minheap.size()>k){
                minheap.pop();  // 保证堆中一直是k个元素,且是当前访问过的k个元素中的最大值
            }
        }
        return minheap.top();
    }
};

 

posted @ 2021-07-22 23:46  三一一一317  阅读(45)  评论(0)    收藏  举报