思路:快速排序,每次都定位一个元素,找指定位置的元素还得有序,很容易就想到快排思想
小优化之处就是当前归位元素比目标元素小就继续往右,比目标元素大就往左,相等就返回
class Solution {
public int findKthLargest(int[] nums, int k) {
return quickselect(nums,0,nums.length-1,k);
}
int quickselect(int[] nums, int start, int end, int k) {
if(start>=end){
return nums[nums.length - k];
}
int p = nums[end];
int i = start-1;
int r = end;
for(int j = start;j<=end;j++){
if(nums[j]<=p){
i++;
int t = nums[j];
nums[j] = nums[i];
nums[i] = t;
}
}
if(i>nums.length - k){
return quickselect(nums,start,i-1,k);
}else if(i<nums.length - k){
return quickselect(nums,i+1,end,k);
}else{
return nums[i];
}
}
}