LeetCode-Interview40-最小的k个数

Posted Edwin Xu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode-Interview40-最小的k个数相关的知识,希望对你有一定的参考价值。

题目描述

输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。

我的题解

暴力排序

把数组升序排好,取出最前的k个即可,很暴力,比较低效, 仅适合与k接近与数组长度。

    //java 8ms
    public int[] getLeastNumbers(int[] arr, int k) {
        Arrays.sort(arr);
        int [] res = new int[k];
        for (int i=0;i<k;i++){
            res[i]=arr[i];
        }
        return res;
    }

有限排序

想法是只找出k个最小数,不要对其他的数进行排序

    //效率还是不行,比上面全排序还差,这个排序算法需要改进!
    public int[] getLeastNumbers(int[] arr, int k) {
        int len = arr.length;
        int [] res = new int[k];
        for (int i=0;i<k;i++){
            int min = arr[i];
            int minIndex=i;
            for (int j=i+1;j<len;j++){
                if (arr[j]<min){
                    min = arr[j];
                    minIndex=j;
                }
            }
            if (minIndex!=i) arr[minIndex]=arr[i];
            res[i]=min;
        }

        return res;
    }

以上是关于LeetCode-Interview40-最小的k个数的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer--40最小的k个数

剑指offer--40最小的k个数

剑指 Offer 40. 最小的k个数

剑指 Offer 40. 最小的k个数

剑指offer_40_最小的 K 个数

剑指offer40最小的K个数