1.使用STL中的priority_queue构造大顶堆:
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
priority_queue<int, vector<int>, less<int> > q;
for(int i=0;i<nums.size();i++)
q.push(nums[i]);
while(k>1){
q.pop();
k--;
}
return q.top();
}
};
2.自己构建小顶堆:
class Solution {
public:
void H_Sort(vector<int>& nums, int len, int pos){
int left=pos*2+1;
int right=pos*2+2;
int maxID=pos;
if(left<len && nums[left]>nums[maxID]) maxID=left;
if(right<len && nums[right]>nums[maxID]) maxID=right;
swap(nums[maxID], nums[pos]);
if(maxID!=pos)
H_Sort(nums, len, maxID);
}
void HeapSort(vector<int>& nums, int len, int k){
for(int i=len/2-1;i>=0;i--){
H_Sort(nums, len, i);
}
for(int i=len-1;i>=len-k;i--){
swap(nums[0], nums[i]);
H_Sort(nums, i-1, 0);
}
}
int findKthLargest(vector<int>& nums, int k) {
if(nums.size()==1)
return nums[0];
HeapSort(nums, nums.size(), k);
return nums[nums.size()-k];
}
};