最小的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; } }

 

posted @ 2020-07-17 18:52  你眼里的星辰  阅读(81)  评论(0)    收藏  举报