题目:
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。时间复杂度为 O(n) 的算法
解法一:
利用STL特性解题:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution
{
public:
int findKLargest(vector<int>& nums, int k)
{
// make_heap() 用于把一个可迭代容器变成一个大顶堆,即升序
make_heap(nums.begin(),nums.end());
for(int i = 0;i<k-1;i++)
{
// pop_heap:用于将堆的第0个元素与最后一个元素交换位置
pop_heap(nums.begin(),nums.end());
// pop_back:删除容器内的最后一个元素
nums.pop_back();
}
return nums[0];
}
};
解法二、常规思路
sort排序后,选择第nums.size()-k的值,即为第k个最大值:sort是升序排序
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
return nums[nums.size() - k];
}
};
标签:sort,215,nums,--,元素,pop,int,Leecode,heap
From: https://blog.csdn.net/qq_41920323/article/details/139322906