LeetCode-215. 数组中的第K个最大元素

题目描述 数组中的第K个最大元素

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

示例

输入: [3,2,1,5,6,4] 和 k = 2
输出: 5

解题思路

维护一个最小堆

代码一

class Solution {
public:
    int findKthLargest(vector& nums, int k) {
        priority_queue,greater > heap;//最小堆
        for(int i =0;iheap.top())
                {
                    heap.pop();
                    heap.push(nums[i]);
                }
            }
        }
        return heap.top();
    }
};

代码二

class Solution {
public:
    void maxHeap(vector &nums, int i, int high){
        int left = 2*i+1, right = 2*i+2;
        int largest;
        if(leftnums[i]) largest = left;
        else largest = i;

        if(rightnums[largest]) largest = right;

        if(largest!=i){
            swap(nums[i], nums[largest]);
            maxHeap(nums, largest, high);
        }
    }

    void bulidHeap(vector &nums){
        for(int i=nums.size()/2-1; i>=0; i--){
            maxHeap(nums, i, nums.size());
        }
    }


    void heapSort(vector &nums){
        bulidHeap(nums);
        for(int i=nums.size()-1; i>0; i--){
            swap(nums[0], nums[i]);
            maxHeap(nums, 0, i);
        }
    }

    int findKthLargest(vector& input, int k) {
        vector nums(input.begin(), input.begin()+k);

        heapSort(nums);
        for(auto num:nums) cout << num << " ";
        cout << endl;
        for(int i=k;inums[0]){
                nums[0] = input[i];
                heapSort(nums);
            }
        }
        return nums[0];
    }
};

你可能感兴趣的:(LeetCode-215. 数组中的第K个最大元素)