给定整数数组 nums
和整数 k
,请返回数组中第 k
个最大的元素。
class Solution {
int res;
public int findKthLargest(int[] nums, int k) {
QuickSort(nums,0,nums.length-1,k);
// for(int i:nums){
// System.out.println(i);
// }
return res;
}
public void QuickSort(int[] nums, int low, int high,int k){
if(low>high){return;}
int i = low;
int j = high;
int pivot = nums[low];
while(i<j){
while(i<j&&nums[j]<=pivot){
j--;
}
while(i<j&&nums[i]>=pivot){
i++;
}
if(i<j){
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}
}
nums[low] = nums[i];
nums[i] = pivot;
// for(int h:nums){
// System.out.print(h);
// }
System.out.println();
if(i==k-1){
res=nums[i];
}else
if(i>k-1){
QuickSort(nums,low,i-1,k);
}else if(i<k-1){
QuickSort(nums,i+1,high,k);
}
}
}
思路:快速排序的思想,实现快速选择,在pivot一轮后,根据pivot的位置选择左边区间继续排序还是右边区间排序,有个地方卡了一下:没有考虑到第k大应该倒过来看,还是审题不认真