第K大的数

思路:维护一个K大小的最小堆,堆顶就是最小的元素,新元素都比堆顶小,当堆中元素个数小于K时,直接进入堆,当堆顶小于新元素时,弹出堆顶,新元素加入堆。

 

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int findKthLargest(vector<int>& nums, int k)
{
    priority_queue<int, vector<int>, greater<int> > pq;
    for(int i = 0; i < nums.size(); ++i)
    {
        if(pq.size() < k)
        {
            pq.push(nums[i]);
        }
        else if(pq.top() < nums[i])
        {
            pq.pop();
            pq.push(nums[i]);
        }
    }
    return pq.top();
}
int main(int argc, const char** argv) {
    vector<int> nums;
    nums.push_back(3);
    nums.push_back(2);
    nums.push_back(1);
    nums.push_back(5);
    nums.push_back(6);
    nums.push_back(4);
    cout << findKthLargest(nums, 4);
    return 0;
}

 

posted @ 2021-01-12 14:49  11YS  阅读(80)  评论(0编辑  收藏  举报