代码最小堆,查找k最小值
import java.util.ArrayList;
import java.util.List;
public class Solution {
private ArrayList<Integer> heapSort(int[] ins, int k){
int n = ins.length;
for(int i = (n-1)/2;i>=0;i--){
adjustHeap(ins, i, n);
}
ArrayList<Integer> ans = new ArrayList<>();
int tmp;
for(int i=n-1;i>n-k-1;i--){
ans.add(ins[0]);
tmp = ins[0];
ins[0] = ins[i];
ins[i] = tmp;
adjustHeap(ins, 0, i);
}
return ans;
}
private void adjustHeap(int[] ins, int parent,int n){
int cur = ins[parent];
int lchild = parent*2+1;
while(lchild<n){
int rchild = lchild+1;
while(rchild<n&&ins[lchild]>ins[rchild]){
lchild++;
}
if(cur<ins[lchild]){
break;
}
ins[parent] = ins[lchild];
parent = lchild;
lchild = parent*2+1;
}
ins[parent] = cur;
}
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> res = new ArrayList<>();
if(input==null||input.length==0){
return res;
}
if(k<=input.length){
res = heapSort(input, k);
}
return res;
}
}
京公网安备 11010502036488号