LeetCode:74.数组中的第K个最大元素
目录
1.数组中的第K个最大元素
1.数组中的第K个最大元素
这道题通过堆排序解决,我们建立一个最大堆,将堆顶的K - 1个元素删除,留下的就是第K大的
class Solution {
public:void maxHeap(vector<int>& nums, int parent, int heapsize){int left = parent * 2 + 1, right = parent * 2 + 2;int maxsum = parent;if(left < heapsize && nums[left] > nums[maxsum]) maxsum = left;if(right < heapsize && nums[right] > nums[maxsum]) maxsum = right;if(maxsum != parent){swap(nums[maxsum], nums[parent]);maxHeap(nums, maxsum, heapsize);}}void buildMaxHeap(vector<int>& nums, int heapsize){for(int i = heapsize; i >= 0; i--)maxHeap(nums, i, heapsize);}int findKthLargest(vector<int>& nums, int k) {int heapsize = nums.size();buildMaxHeap(nums, heapsize);for(int i = nums.size() - 1; i >= nums.size() - k + 1; i--){swap(nums[0], nums[i]);--heapsize;maxHeap(nums, 0, heapsize);}return nums[0];}
};