0
点赞
收藏
分享

微信扫一扫

数组中最大的第K个元素

拾杨梅记 2022-02-27 阅读 55

题目描述:

输入:

输出:

解题思路(此解法相对比较优化):

  1. 利用priority_queue建立堆
  2. priority_queue默认为建立大堆
  3. 通过出堆,即可找出数据
class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
    //方法一:先排序,升序,再从往前找
    //时间复杂度:O(N*logN)
       // sort(nums.begin(),nums.end());
       // return nums[nums.size()-k];

       //方法二:先排序,利用模板参数,直接降序排序,再从前往后找
       //时间复杂度:O(N*logN)
       //sort(nums.begin(),nums.end(),greater<int>());
       //return nums[k-1];

	//方法三:先放数据在priority_queue中,再删除前k-1个数
	//时间复杂度:O(N+K*logK)
	//若N远远大于K,这这方法更适用
		//priority_queue<int> p(nums.begin(),nums.end())
		//for(int i = 0; i < k-1; i++)
		//{
		//	p.pop();
		//}
		//return p.top();

	//方法四:
       //构建k个数的小堆,最优化
       //时间复杂度:O(K+(N-K)*logK)
        priority_queue<int,vector<int>,greater<int>> KMinHeap(nums.begin(),nums.begin()+k);
        for(size_t i = k; i < nums.size(); ++i)
        {
             if(nums[i] > KMinHeap.top())
             {
                 KMinHeap.pop();
                 KMinHeap.push(nums[i]);
             }
        }
        return KMinHeap.top();

    }
};
举报

相关推荐

0 条评论