不使用原生优先级队列,自己实现一个
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
int len = input.length;
for(int i=(k-1)/2;i>=0;i--){
shiftDown(input,i,k-1);
}
for(int i=len-1;i>=k;i--){
if(input[i]>=input[0]){
continue;
}else{
swap(input,i,0);
shiftDown(input,0,k-1);
}
}
ArrayList<Integer> res = new ArrayList();
for(int i=0;i<k;i++){
res.add(input[i]);
}
return res;
}
void shiftDown(int[] input,int index,int len){
while(2*index+1<=len){
int j = index*2+1;
if(j+1<=len && input[j]<input[j+1]){
j++;
}
if(input[index]>=input[j]){
break;
}
swap(input,index,j);
index = j;
}
}
void swap(int[] input , int i , int j){
int temp = input[i];
input[i] = input[j];
input[j] = temp;
}
}
class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
int len = arr.length;
for(int i=(k-1)/2;i>=0;i--){
shiftDown(arr,i,k-1);
}
for(int i=len-1;i>=k;i--){
if(arr[i]>=arr[0]){
continue;
}else{
swap(arr,i,0);
shiftDown(arr,0,k-1);
}
}
int res[] = new int[k];
System.arraycopy(arr,0,res,0,k);
return res;
}
void shiftDown(int[] arr,int index,int len){
while(2*index+1<=len){
int j = index*2+1;
if(j+1<=len && arr[j]<arr[j+1]){
j++;
}
if(arr[index]>=arr[j]){
break;
}
swap(arr,index,j);
index = j;
}
}
void swap(int[] arr , int i , int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}