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.
Example 1:
Input: [3,2,1,5,6,4] and k = 2 Output: 5
Example 2:
Input: [3,2,3,1,2,4,5,5,6] and k = 4 Output: 4
Note:
You may assume k is always valid, 1 ≤ k ≤ array's length.
考察:快排一次划分
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
int left = 0, right = nums.size() - 1;
while (1) {
int pos = partition(nums, left, right);
if (pos == k-1)
return nums[pos];
else if (pos > k-1)
right = pos - 1;
else
left = pos + 1;
}
}
int partition(vector<int>& nums, int left, int right) {
int pivot = nums[left];
int low = left + 1, high = right;
while (low <= high) {
if (nums[low] < pivot && pivot < nums[high])
swap(nums[low++], nums[high--]);
if (nums[low] >= pivot)
low ++;
if (nums[high] <= pivot)
high --;
}
swap(nums[left], nums[high]);
return high;
}
};