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

class Solution { public: int findKthLargest(vector<int>& nums, int k) { priority_queue<int, vector<int>, less<int>> maxheap; for(int i = 0; i < nums.size(); i++){ maxheap.push(nums[i]); } int count = 1; while(count <k){ maxheap.pop(); count++; } return maxheap.top(); } };
二刷:简洁版
/* 假设: nums: [3,2,1,5,6,4] ,k = 2 1. 首先建立一个小根堆; 2. 然后遍历元素,将元素加入堆中。如果当前堆的大小大于KK,弹出堆.(保证堆中是访问过的k个最大元素) 3. 最后取出堆头元素。 最后堆中有k个元素,因为是小根堆,所以堆头正好是第k大元素 */ class Solution { public: int findKthLargest(vector<int>& nums, int k) { priority_queue<int, vector<int>, greater<int>> minheap; // 小根堆 for(int i = 0; i < nums.size(); i++){ minheap.push(nums[i]); if(minheap.size()>k){ minheap.pop(); // 保证堆中一直是k个元素,且是当前访问过的k个元素中的最大值 } } return minheap.top(); } };

浙公网安备 33010602011771号