- 方法1:排序后返回倒数第k个元素。
- 利用小顶堆,构建k个元素的小顶堆,将数组中最大的k个数全部入堆,则堆顶元素即为答案。
class Solution {
public int findKthLargest(int[] nums, int k) {
buildHeap(nums, k);
for(int i=k; i<nums.length; i++){
if(nums[i] < nums[0]){
continue;
}else{
swap(nums, i, 0);
heapify(nums, k, 0);
}
}
for(int i=0; i<k; i++){
System.out.println(nums[i]);
}
return nums[0];
}
public void buildHeap(int[] nums, int k){
for(int i=k/2-1; i>=0; i--){
heapify(nums, k, i);
}
}
public void heapify(int[] a, int k, int index){
int min = index;
while(true){
if(index*2+1<k && a[index*2+1] < a[index]){
min = index*2+1;
}
if(index*2+2<k && a[index*2+2] < a[min]){
min = index*2+2;
}
if(min == index)break;
swap(a, index, min);
index = min;
}
}
public void swap(int[] a, int i, int m){
int temp = a[i];
a[i] = a[m];
a[m] = temp;
}
}