第k大的数
第k大的数
思路:对于无序数组直接进行快速排序,快排每一趟会有一个数会定下位置,判断这个数的位置是否为nums.length-k,这样进行剪枝减少计算。
class Solution {
public int findKthLargest(int[] nums, int k) {
int result = quickSort(nums, 0, nums.length-1, nums.length - k);
return nums[result];
}
public int quickSort(int[] nums,int low,int high,int q){
if(low < high){
int index = partition(nums, low, high);
if(index == q){
return index;
}else{
return index > q ? quickSort(nums,low,index - 1,q):quickSort(nums,index + 1, high,q);
}
}else{
return q;
}
}
public int partition(int[] nums,int low,int high){
int piovt = nums[low];
while(low < high){
while(low < high && nums[high] >= piovt) high--;
if(low < high) nums[low] = nums[high];
while(low < high && nums[low] <= piovt) low++;
if(low < high) nums[high] = nums[low];
}
nums[low] = piovt;
return low;
}
}