美文网首页
最小的k个数

最小的k个数

作者: 环宇飞杨 | 来源:发表于2020-04-13 22:12 被阅读0次

题目

设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。

示例:

输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]

解题思路

解法1:
快排后取前k个数
解法2:大顶堆|小顶堆
长度为k,利用内部的堆排序一次性找出最小k个数。
java特有的东西,之前都没见过,但快排O(logn+k),用堆执行起码得把数组都过一遍,不会比快排快,所以先贴上代码,当熟悉下。

class Solution {
    public int[] smallestK(int[] arr, int k) {
        quickSort(arr,0,arr.length - 1);
        int[] res = new int[k];
        for (int i = 0; i <k ; i++){
            res[i] = arr[i];
        }
        return res;
    }

    public void quickSort (int[] arr, int left, int right){
        if (left > right) return;
        int i = left;
        int j = right;
        int value = arr[left];
        while (i < j){
            while(value <= arr[j] && i<j){
                j--;
            }
            while (value >= arr[i] &&i<j){
                i++;
            }
            if (i < j){
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        arr[left] = arr[j];
        arr[j] = value;
        quickSort(arr,left,j-1);
        quickSort(arr,j+1,right);
    }
}
class Solution {
    public int[] smallestK(int[] arr, int k) {
        PriorityQueue<Integer heap = new PriorityQueue<Integer>(k+1);
        for (int num: arr){
              heap.offer(num); //压入堆,内部排序后将大值踢出。
        }
         int[] res = new int[k];
        for (int i = 0; i <k ; i++){
            res[i] = heap.poll(); //遍历输出
        }
        return res;
    }
}

作者:xiaoxiaoyuxie
链接:https://leetcode-cn.com/problems/smallest-k-lcci/solution/kuai-pai-by-xiaoxiaoyuxie/
来源:力扣(LeetCode)

相关文章

  • 算法-数组(三)

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

  • 最小的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...

  • 最小的K个数

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

  • 最小的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,...

  • 最小的k个数

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

  • 最小的K个数

    import java.util.Scanner; public class GetLestNumbers { }

网友评论

      本文标题:最小的k个数

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