使用最大堆解决该问题
老师看一下这个方法行吗,效率可能低了一些,但是应该能解决问题。
包括LC.215 和 求数组中的前 k 个最大元素,以下代码是求解 LC.215的 C++实现
// 使用最大堆解决该问题 C++ Version
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
priority_queue<int> pq;
// 把数组的全部元素放入最大堆
for (int i = 0; i < nums.size(); i++) pq.push(nums[i]);
// 依次出队前 k 个的元素
for (int i = 1; i <= k; i++) {
// 返回第 k 个最大元素 (第 k 大元素)
if (i == k) return pq.top();
pq.pop();
}
return INT_MAX;
// 如果 求前 k 个最大元素,依次出队放入数组返回即可
}
};
15
收起
正在回答
1回答
可以的,思路是正确的。
但是这样做没有展现出使用优先队列方法的真正优势,即:数据可以不一次性给到,可以使用数据流的方式给出。你的写法一上来把所有元素都扔个堆,相当于要求一次性要知道所有元素。
对此,可以参考课程这一小节的分析:https://class.imooc.com/lesson/1585#mid=38640
另外,你可以尝试做一下这个问题,更能体现出使用优先队列的优势。你的这种方式就不行了:https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/
继续加油!:)
相似问题
登录后可查看更多问答,登录/注册
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星