主页 > 开源代码  > 

letcode::数组中的第k个最大元素

letcode::数组中的第k个最大元素

数组中的第k个最大元素

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,6,4], k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6], k = 4 输出: 4

思路:

sort排序 从大到小排序后,返回第k-1个元素。优先队列 大堆的时间复杂度是 k ∗ l o g 2 N k * log_2N k∗log2​N 小堆的时间复杂度是 ( N − K ) ∗ l o g 2 K (N-K)*log_2K (N−K)∗log2​K 当k不大时,还是与O(N)接近的。

代码:

sort排序

class Solution { public: int findKthLargest(vector<int>& nums, int k) { sort(nums.begin(), nums.end(), greater<int>()); return nums[k - 1]; } };

大堆

class Solution { public: int findKthLargest(vector<int>& nums, int k) { //大堆 k * logN priority_queue<int> pq(nums.begin(), nums.end()); while (--k) { pq.pop(); } return pq.top(); } };

小堆

class Solution { public: int findKthLargest(vector<int>& nums, int k) { //小堆 (N- K)* logN priority_queue<int, vector<int>, greater<int>> pq(nums.begin(), nums.begin() + k); for (int i = k; i < nums.size(); ++i) { if (nums[i] > pq.top()) { pq.pop(); pq.push(nums[i]); } } return pq.top(); } };
标签:

letcode::数组中的第k个最大元素由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“letcode::数组中的第k个最大元素