LeetCode215 数组中的第K大的元素

LeetCode215 数组中的第K大的元素

题目

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

LeetCode215 数组中的第K大的元素_第1张图片

解法 堆排序

先把数组建立成一个大顶堆,再进行排序
经典堆排序问题

class Solution {
public:
    void heapify(vector<int>& nums, int n, int i){
        if( i >= n) 
           return;
        int c1 = 2 * i + 1;
        int c2 = 2 * i + 2;
        int max = i;
        if(c1 < n && nums[max] < nums[c1]){
            max = c1;
        }
        if(c2 < n && nums[max] < nums[c2]){
            max = c2;
        }
        if(max != i){
            swap(nums[max], nums[i]);
            heapify(nums, n, max);
        }
    }

    void buildHeap(vector<int>& nums, int n){
        int max = n - 1;
        int parent = (max - 1) / 2;
        for(int i = parent; i >= 0; --i){
            heapify(nums, n, i);
        }
    }

    int findKthLargest(vector<int>& nums, int k) {
        int n = nums.size();
        buildHeap(nums, n);
        for(int i = n -1;i >= 0; --i){
            swap(nums[i], nums[0]);
            heapify(nums, i, 0);
        }
        return nums[n - k];
    }
};

你可能感兴趣的:(每日刷题,leetcode)