215. 数组中的第K个最大元素
建堆,弹出k-1个后,顶部即为第K大
class Solution {public:void maxHeapDown(vector<int>& nums,int father,int heapSize){int l=father*2+1;int r=father*2+2;int largest = father;if(l<heapSize&&nums[l]>nums[largest]){largest = l;}if(r<heapSize&&nums[r]>nums[largest]){largest = r;}if(largest!=father){swap(nums[father],nums[largest]);maxHeapDown(nums,largest,heapSize);}}void buildHeap(vector<int>& nums){for(int i=nums.size()/2;i>=0;i--){maxHeapDown(nums,i,nums.size());}}int findKthLargest(vector<int>& nums, int k) {buildHeap(nums);int heapSize = nums.size();for(int i=0;i<k-1;i++){swap(nums[0],nums[heapSize-1]);heapSize--;maxHeapDown(nums,0,heapSize);}return nums[0];}};
