leetcode|leetcode215. 数组中的第K个最大元素

给定整数数组nums和整数k,请返回数组中第k个最大的元素。
请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。
示例:
?输入:[3, 2, 1, 5, 6, 4] 和 k = 2
?输出:5
思路:
寻找数组当中的第K大元素,有以下两个步骤:

  1. 先用数组当中的前K个元素构建小堆。
  2. 将数组当中剩余元素与堆顶元素进行比较,若比堆顶元素大,则将堆顶元素弹出,将该元素入堆,并对堆进行调整使其仍为小堆。
如此进行下去,直到数组遍历结束,此时堆顶的元素便是数组当中的第K个最大元素。因为此时堆当中的K个元素便是数组当中最大的K个元素,而堆顶又是这K个元素当中最小的元素,所以堆顶元素就是数组当中的第K大元素。
【leetcode|leetcode215. 数组中的第K个最大元素】代码如下:
class Solution {public: int findKthLargest(vector& nums, int k) {//先用数组当中的前K个元素构建小堆 priority_queue, greater> q(nums.begin(), nums.begin() + k); //处理数组剩余元素 for (size_t i = k; i < nums.size(); i++) {if (nums[i] > q.top()) //若比堆顶元素大 {q.pop(); //将堆顶元素弹出 q.push(nums[i]); //将该元素入堆 } } return q.top(); //返回堆顶元素即为数组当中的第K个最大元素 } };

    推荐阅读