美文网首页
LeetCode 每日一题 [60] 最小的k个数

LeetCode 每日一题 [60] 最小的k个数

作者: 是小猪童鞋啦 | 来源:发表于2020-07-18 07:32 被阅读0次
LeetCode 最小的k个数 [简单]

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof

示例 1:

输入:arr = [3,2,1], k = 2
输出:[1,2] 或者 [2,1]

示例 2:

输入:arr = [0,1,2,1], k = 1
输出:[0]

限制:

0 <= k <= arr.length <= 10000
0 <= arr[i] <= 10000

题目分析
解法1

使用大根堆实现

解法2

先把数组排序,然后取出前k个元素即可

代码实现
public class GetLeastNumbers {

    public static void main(String[] args) {
        int[] arr = {3, 2, 1};
        int k = 2;
        int[] leastNumbers = getLeastNumbers(arr, k);
        System.out.println(Arrays.toString(leastNumbers));
    }

    public static int[] getLeastNumbers1(int[] arr, int k) {
        if (k == 0) {
            return new int[0];
        }
        Queue<Integer> heap = new PriorityQueue<>(k, (i1, i2) -> Integer.compare(i2, i1));
        for (int ele : arr) {
            if (heap.isEmpty() || heap.size() < k || ele < heap.peek()) {
                heap.offer(ele);
            }
            if (heap.size() > k) {
                heap.poll();
            }
        }
        int[] res = new int[heap.size()];
        int j = 0;
        for (Integer ele : heap) {
            res[j++] = ele;
        }
        return res;
    }

    public static int[] getLeastNumbers(int[] arr, int k) {
        if (arr == null || arr.length == 0 || k == 0 || k > arr.length) {
            return new int[]{};
        }
        if (k == arr.length) {
            return arr;
        }
        int[] res = new int[k];
        Arrays.sort(arr);
        for (int i = 0; i < k; i++) {
            res[i] = arr[i];
        }
        return res;
    }
}

相关文章

  • LeetCode 每日一题 [60] 最小的k个数

    LeetCode 最小的k个数 [简单] 输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、...

  • Java日记2018-05-13

    第一题 最小的 K 个数可以基于Partition函数来解决这个问题。如果基于数组的第k个数字来调整,使得比第k个...

  • K个数、K个点、K个元素,3K堆排序,类比三解题!

    面试题17.14.最小K个数[https://leetcode-cn.com/problems/smallest-...

  • BFPRT 算法

    本节以今天leetcode打卡题为例来介绍下BFPRT算法。 最小的k个数 输入整数数组 arr ,找出其中最小的...

  • 算法-数组(三)

    最小的k个数 求子数组的最大和 把数组排成最小的数字 1.最小的k个数 问题描述:输入n个数字,找到数组中最小的k...

  • 每日一练(21):最小的k个数

    title: 每日一练(21):最小的k个数 categories:[剑指offer] tags:[每日一练] d...

  • 最小的k个数

    问题描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是...

  • 最小的k个数

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

  • 最小的K个数

    题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1...

  • 最小的k个数

    参考: [1] https://www.nowcoder.com/questionTerminal/6a296eb...

网友评论

      本文标题:LeetCode 每日一题 [60] 最小的k个数

      本文链接:https://www.haomeiwen.com/subject/rgdfzhtx.html