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.
Silu: Just like quick sort, using the partition method.
We need to pay more attention on the partition should from end first.
public class Solution {
public int findKthLargest(int[] nums, int k) {
if(k>nums.length) return 0;
int cur = 0, start = 0, end = nums.length - 1;
while(start <= end){
cur = pivot(nums, start, end);
if(cur == k - 1)
return nums[cur];
else if(cur > (k - 1)){
end = cur - 1;
}else{
start = cur + 1;
}
}
return 0;
}
public int pivot(int[] nums,int start,int end){
int t = nums[start];
while(start<end){
while(start<end&&nums[end]<=t){
end--;
}
nums[start] = nums[end];
while(start<end&&nums[start]>=t){
start++;
}
nums[end] = nums[start];
}
nums[start] = t;
return start;
}
}