目录
题目:
示例:
分析:
代码:
题目:
示例:
分析:
题目很简单,就是给我们一个数组,让我们返回第K大的元素。
那么很直观的一个做法就是我们直接对数组进行降序排序,索引为k-1的元素就是整个数组里第k大的元素了。
另外一个就是使用大顶堆,C++里有内置,是叫priority_queue优先队列,我们只需要往优先队列里塞进元素,那么这个容器底层会自动对元素进行排序,我们从大顶堆里取的数永远是队列里最大的数,那么我们只需要取数,再将大顶堆的堆顶元素移出,如此反复k-1次,那么最后取出的数就是数组里第K大的元素了。
至于大顶堆该怎么实现,我的看法是我们普通人只需要会使用内置的容器就可以了,真的要自己手写一个大顶堆的话还是挺麻烦的。
代码:
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
//使用C++内置优先队列 大顶堆
priority_queue<int>pq(nums.begin(),nums.end());
for(int i=0;i<k-1;i++){
pq.pop();
}
return pq.top();
//从大到小排序后返回第K大的元素
sort(nums.begin(),nums.end(),[](int a,int b){
return a>b;
});
return nums[k-1];
}
};