概念
堆是一种数据结构,就是每个节点根据某种规则排序, 从根节点往下都符合某种规律,根节点的值比所有节点的值都大, 称为最大堆;根节点的值比所有节点的值都小, 称为最小堆。
思路
实现
class Solution {
public:
void adjust_heap(vector<int>& nums, int father, int len) {
int left = 2 * father + 1;
int right = 2 * father + 2;
int max = father;
if (left < len && nums[left] > nums[max])
max = left;
if (right < len && nums[right] > nums[max])
max = right;
if (max != father) {
swap(nums[father], nums[max]);
adjust_heap(nums, max, len);
}
}
void buildMaxHeap(vector<int>& nums, int len) {
for (int i = len / 2; i >= 0; --i) {
adjust_heap(nums, i, len);
}
}
int findKthLargest(vector<int>& nums, int k) {
int len = nums.size();
buildMaxHeap(nums, len);
for (int i = 0; i < k; ++i) {
swap(nums[0], nums[nums.size() - 1 - i]);
--len;
adjust_heap(nums, 0, len);
}
return nums[0];
}
};