目录
1.数组中的第K个最大元素

这道题通过堆排序解决,我们建立一个最大堆,将堆顶的K - 1个元素删除,留下的就是第K大的
cpp
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];
}
};