问题
在未排序的数组中找到第 k 个最大的元素
例子
思路
第k大,即下标为nums.length-k【第一大为len-1】
- 暴力:先排序,然后返回nums.length-k下标
- 使用快排,如果pivot_index是len-k的话就停止
- 使用堆。
1:堆排序,从第1大开始,找到第k大,就停止
2:小顶堆(维持k个结点),然后不断把数组中的数字取出,如果大于最小的,替换掉最小的,最终小顶堆的根节点就是k大
代码
//暴力:
Arrays.sort(nums);
return nums[nums.length-k];
//快排
public int findKthLargest(int[] nums, int k) {
//第k大的坐标为nums.length-k
int low = 0, high=nums.length-1;
while (low<high){
int pivot_index = partition(nums,low,high);
if (pivot_index==nums.length-k) break;
if (pivot_index<nums.length-k) low=pivot_index+1;
if (pivot_index>nums.length-k) high = pivot_index-1;
}
return nums[nums.length-k];
}
public void quick_sort(int[] nums,int low, int high,int k) {
if (low>=high<