Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4]
and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array's length.
Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.
代码如下:
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
int length = nums.size();
if (length == 1) {
return nums[0];
}
vector<int> left;
vector<int> right;
for (int index=1; index<length; index++) {
if (nums[index] > nums[0]) {
right.push_back(nums[index]);
}else{
left.push_back(nums[index]);
}
}
length = right.size();
if (length >=k) {
return findKthLargest(right, k);
}else if(length == k-1){
return nums[0];
}else{
return findKthLargest(left, k-length-1);
}
}
};
LeetCode对时间要求不高,下面这样的代码也能通过:
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
reverse(nums.begin(), nums.end());
return nums[k-1];
}
};