2018-09-27 215. Kth Largest Element in an Array

题意:给你一个无序数组,返回该数组第K大的数(重复的两个数算两个)。
解题思路:使用优先队列priority_queue<int> q;
一、优先队列声明方式:
priority_queue<int, vector<int>, less<int>> q1(等效于priority_queue<int> ),意思是,声明优先队列,默认是按照大的数排在前面,小的数排在后面。(越往后越less)
priority_queue<int, vector<int>, greater<int>> q1, 升序队列,最小的元素排在前面(越往后越greater)。
二、优先队列用法(和普通队列一样):
q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回1,否则返回0
q.push(k);//在q的末尾插入k
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素
q.back();//返回q的末尾元素
三、优先队列时间复杂度:
因为优先队列的实现方式堆,堆是一种完全二叉树,在构建优先队列(堆)的时候时间复杂度是O(N),在插入删除的时候时间复杂度是O(logN)。可见操作相当高效。

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        priority_queue<int> q;
        for(int i = 0; i < nums.size(); i++)
            q.push(nums[i]);
        for(int i = 0; i < k-1; i++)
            q.pop();
        return q.top();
        
    }
};
    原文作者:alexssssu
    原文地址: https://www.jianshu.com/p/6f0f9437e5f9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞