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.
class Solution {
public:
int partion (vector<int>& nums, int left, int right) {
int pivot = nums[left];
int i = right + 1;
for (int j = right; j>= left; j--) {
if (nums[j] <= pivot) {
i--;
if (i != j) swap(nums[i], nums[j]);
}
}
cout << i << endl;
return i;
}
int findKthLargest(vector<int>& nums, int k) {
if (nums.size() < k) return 0;
if (nums.size() == 1) return nums[0];
int left = 0;
int right = nums.size() - 1;
while (true) {
int pos = partion(nums, left, right);
if (pos == k-1) return nums[pos];
if (pos < k - 1) left = pos+1;
else right = pos -1;
}
}
};