题解:
class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
int n = arr.length;
for (int i =n/2-1;i>=0;i--){
heapify(arr,n,i);
}
int[] x= new int[k];
for (int i=0;i<k;i++) {
x[i] = arr[0];
int tmp = arr[0];
arr[0] = arr[n-1];
n--;
heapify(arr,n, 0);
}
return x;
}
public void heapify(int[] arr,int n,int i){
if (i>=n/2){
return;
}
int minindex = i;
if ((2*i+1)<=n-1) {
System.out.println(arr[i]+"<"+arr[2*i+1]);
if( arr[minindex]>arr[2*i+1]){
minindex=2*i+1;
}
}
if ((2*i+2)<=n-1){
System.out.println(arr[minindex]+"<"+arr[2*i+2]);
if( arr[minindex]>arr[2*i+2]){
minindex = 2*i+2;
}
}
if (minindex != i) {
int tmp=arr[i];arr[i]=arr[minindex];arr[minindex]=tmp;
heapify(arr,n,minindex);
}
}
}
有两个容易错的地方,在此记录一下: