最小的k个数
题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
思考: 直接背过了,哈哈哈哈,堆排序!!
public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> res = new ArrayList<>(); if(input==null||input.length<k) return res; // 初始化堆 for(int i=k/2-1;i>=0;i--){ // heapSort(input,0,k-1); // 初始化堆 怎么从0开始呢 ????
heapSort(input,i,k-1); 应该是这种方式!!!!!! } for(int i=k;i<input.length;i++){ if(input[i]<input[0]){ input[0]=input[i]; heapSort(input,0,k-1); } } for(int i=0;i<k;i++){ res.add(input[i]); } return res; } // 大顶堆 void heapSort(int[]a,int start ,int end){ int val=a[start],cur=start; int leftIndex=2*cur+1; while(leftIndex<=end){ if(leftIndex+1<=end&&a[leftIndex]<a[leftIndex+1]) leftIndex++; if(a[leftIndex]>val){ /// 一定要注意 是与 val比较大小,而不是与别的!!!! a[cur]=a[leftIndex]; cur=leftIndex; leftIndex=2*cur+1; }else{ break; } } a[cur]=val; } }
也许会有遗憾,但是不应该在失败之前
浙公网安备 33010602011771号