原题链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/
1、暴力
int findKthLargest(vector<int>& nums, int k) {
sort(nums.begin(),nums.end(),greater<int>());
return nums[k-1];
}
2、堆排序
void max_heapify(vector<int> &arr,int start,int end){
int dad =start;
int son =dad*2+1;
while(son<=end){
if(son+1<=end&&arr[son]<arr[son+1])
son++;
if(arr[dad]>arr[son])
return;
else{
swap(arr[dad],arr[son]);
dad=son;
son=dad*2+1;
}
}
}
void heap_sort(vector<int> &arr,int len){
for(int i=len/2-1;i>=0;i--)
max_heapify(arr,i,len-1);
///for(int i=len-1;i>0;i--){
// swap(arr[0],arr[i]);
// max_heapify(arr,0,i-1);
//}
}
int findKthLargest(vector<int>& nums,int k){
int heapSize=nums.size();
heap_sort(nums,heapSize);
for(int i=heapSize-1;i>=heapSize-k+1;--i){
swap(nums[0],nums[i]);
max_heapify(nums,0,i-1);
}
return nums[0];
}