class Solution {
Random random = new Random();
public int findKthLargest(int[] nums, int k) {
return quicksort(nums,0,nums.length - 1,nums.length - k);
}
public int quicksort(int[] nums,int l, int r,int k){
int q = randomSelect(nums,l,r);
if(q == k) return nums[q];
else{
return q > k ? quicksort(nums,l,q - 1,k):quicksort(nums,q + 1,r,k);
}
}
public int randomSelect(int[] nums,int l, int r){
int i = random.nextInt(r - l + 1) + l;
swap(nums,i,r);
return partition(nums,l,r);
}
public int partition(int[] nums,int l, int r){
int x = nums[r];
int i = l - 1;
for(int j = l; j < r;j++){
if(nums[j] <= x){
swap(nums,++i,j);
}
}
swap(nums,i + 1,r);
return i + 1;
}
public void swap(int[] nums,int l, int r){
int tmp = nums[l];
nums[l] = nums[r];
nums[r] = tmp;
}
}
快排的修改版,肥肠好用,