leetcode215——Kth Largest Element In An Array

题目大意:求出数组中第k大的元素

分析:最简单的,sort之后取倒数第k个,这种方法的时间复杂度是O(nlogn),效率不够高。

改进:堆(优先级队列)。采用小顶堆,优先级队列元素按从小到大排列,遍历数组将数组元素插入队列,同时保持队列内元素个数为k个,遍历结束后的队首元素即为答案。也就是保证堆内有k个元素,比他们小的元素都弹出。堆的插入O(logk),插入n次,所以算法的整体时间复杂度为O(nlogk)。

代码:

堆(优先级队列):

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        priority_queue<int,vector<int>,greater<int>> que;
        for(int i = 0;i < nums.size();i++){
            que.push(nums[i]);
            if(que.size() > k) que.pop();
        }
        return que.top();
    }
};
发布了323 篇原创文章 · 获赞 4 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/tzyshiwolaogongya/article/details/104768008