给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
排序后 返回第 数组长度 - k 个元素
class Solution {
public:
//先排序:快速排序
void kpsort(vector<int>& nums, int i , int j){
if(i < j){
int left = i, right = j;
int mid = nums[left];
while(left < right){
while(nums[right] >= mid && left < right){
right--;
}
if(left < right){
nums[left++] = nums[right];
}
while(nums[left] < mid && left < right){
left++;
}
if(left < right){
nums[right--] = nums[left];
}
}
nums[left] = mid;
kpsort(nums, i, left - 1);
kpsort(nums, left + 1, j);
}
}
int findKthLargest(vector<int>& nums, int k) {
kpsort(nums, 0 , nums.size() -1);
return nums[nums.size() - k];
}
};
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
multiset<int>mset;
for(int i = 0; i<nums.size(); ++i){
mset.insert(nums[i]);
}
auto it = mset.end();
while(k--){
it--;
}
return *it;
}
};