LeetCode215. 数组中的第K个最大元素(C++)

在未排序的数组中找到第 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();
        
    }
};

猜你喜欢

转载自blog.csdn.net/a15929748502/article/details/89341615