题目
思路
通过使用优先队列(最大堆)来找到数组中第k大的元素。通过弹出最大堆中的前k-1个元素,留下堆中的顶部元素作为结果返回。
代码
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
priority_queue<int> pq(nums.begin(),nums.end());
int i=0;
while(i<k-1)
{
pq.pop();
i++;
}
return pq.top();
}
};
代码讲解:
priority_queue<int> pq(nums.begin(), nums.end());
在函数内部,创建了一个名为pq的优先队列(优先级队列),它是一个最大堆。通过将nums数组的元素从begin()到end()范围内添加到优先队列中,初始化了一个包含数组所有元素的最大堆。
int i = 0;
while (i < k - 1) {
pq.pop();
i++;
}
接下来,使用一个循环,执行k-1次pq.pop()操作,将最大堆中的前k-1个元素弹出。由于最大堆的性质,每次弹出的都是当前堆中的最大元素。
return pq.top();
}
};
最后,返回最大堆中的顶部元素,即第k大的元素。由于最大堆的性质,堆顶元素即为堆中的最大元素。
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
// 创建一个最大堆,用于存储数组元素
priority_queue<int> pq(nums.begin(), nums.end());
int i = 0;
// 弹出最大堆中的前 k-1 个元素
while (i < k - 1) {
pq.pop();
i++;
}
// 返回最大堆的顶部元素,即第 k 大的元素
return pq.top();
}
};
(本题完)
原文地址:https://blog.csdn.net/originalHSL/article/details/134678668
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_5207.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。