码迷,mamicode.com
首页 > 其他好文 > 详细

第K大的数

时间:2021-01-13 11:29:41      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:push   ++   stream   ace   ons   cout   top   turn   ndk   

思路:维护一个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;
}

 

第K大的数

标签:push   ++   stream   ace   ons   cout   top   turn   ndk   

原文地址:https://www.cnblogs.com/11ys/p/14266934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!