最小堆查找前K小的值
最小的K个数
http://www.nowcoder.com/questionTerminal/6a296eb82cf844ca8539b57c23e6e9bf
代码最小堆,查找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; } }