题目
给定整数数组 nums
和整数 k
,请返回数组中第 k
个最大的元素。
请注意,你需要找的是数组排序后的第 k
个最大的元素,而不是第 k
个不同的元素。
解法1:排序
对于返回第k个最大的元素,可以对整个数组从大到小进行快速排序,然后返回索引为k - 1的元素即可。代码如下:
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
std::sort(nums.begin(), nums.end(), [](int lhs, int rhs) {
return (lhs > rhs);
});
return nums[k - 1];
}
};
时间复杂度为O(nlogn)
,空间复杂度为O(logn)
,执行结果如下:
解法2:切分
在解法1中,对整个数组进行了排序,而最终仅仅只是为了找到第k个最大的元素,那么很多排序是不必要的。
通过快速排序的切分,可以找到一个随机值在最终排序结果中的索引值&#x