专栏首页后端CoderLeetCode70|最小K个数

LeetCode70|最小K个数

1,问题简述

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

2,示例

示例:

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

0 <= len(arr) <= 100000
0 <= k <= min(100000, len(arr))

 

3,题解思路

排序,优先级队列

4,题解程序

 
import java.util.Arrays;
import java.util.PriorityQueue;

public class SmallestKTest2 {
    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 7, 2, 4, 6, 8};
        int k = 4;
        int[] smallestK = smallestK2(arr, k);
        for (int j : smallestK) {
            System.out.print(j + "\t");
        }
    }

    public static int[] smallestK(int[] arr, int k) {
        Arrays.sort(arr);
        int[] array = new int[k];
        if (k >= 0) {
            System.arraycopy(arr, 0, array, 0, k);
        }
        return array;
    }

    public static int[] smallestK2(int[] arr, int k) {
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(k, Integer::compareTo);
        for (int j : arr) {
            priorityQueue.offer(j);
        }
        int[] array = new int[k];
        for (int i = 0; i < k; i++) {
            array[i] = priorityQueue.poll();
        }
        return array;
    }
}

5,题解程序图片版

6,总结

排序在整个工作中还是比较的常用的一种场景,排序的目的是为了更加高效的检索自己需要的数据,对于数据库优化,为什么要加索引,难道不是为了更加高效的检索自己需要的数据嘛,懂得排序就可以了。最近一段时间的输出文章都是自己之前做过的内容,自己打算将做过的题都整理成一篇篇文章进行梳理一下,喜欢看java的文章可以查看历史记录,本人写过Mybatis框架的系列文章,包括简单的增删改查,高级用法,都是工作中常用的,JDK源码也写了十几篇,MySQL文系列文章等都可以在历史文章进行查找的。

本文分享自微信公众号 - WwpwW(gh_245290c1861a),作者:后端Coder

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LeetCode134|插入区间

    给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

    码农王同学
  • 第五篇排序算法|归并排序

    最近几年很少看电视了,因为没时间看了,除了偶尔刷刷头条,基本上不会花大块的时间沉迷于电视剧,综艺,这或许就是短视频时代所带来的一些改变吧,我们都会深受其中。

    码农王同学
  • leetCode141|滑动窗口的最大值

    其实这道题这里给出了最容易理解的方式来做的,每次滑动一个窗口就找其中的最大值,直到所有滑动窗口的数据找完就可以了,关于代码的内容,个人觉得你自己看懂了就行。

    码农王同学
  • 暑假(补)-4

    动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。 动态规划算法的基本思想与分治法类似,也是将待求解的问题...

    AngelNH
  • Day5上午解题报告

    预计分数:100+40+30=170 实际假分数:0+0+0=0 CE*3 实际真分数:60+50+0=110 老师没把我的程序放的文件夹里面,于是。。。。。 ...

    attack
  • java 版DES和MAC算法

    特立独行的猫a
  • 数组元素的目标和(双指针 or 二分)

    给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。 请你求出满足A[i] + B[j] = x的数对(i, j)。 数据保证有唯一解。

    dejavu1zz
  • 数码管问题(c++实现)

        描述:液晶数码管用七笔阿拉数字表示的十个数字,把横和竖的一 个短划都称为一笔,即7有3笔,8有7笔等。对于十个数字一种排列,要做到  两相邻数字都可以由...

    用户2038589
  • Java经典编程50题(面试笔试机试)

    https://blog.csdn.net/alias_fa/article/details/52985112

    林万程
  • TopcoderSRM679 Div1 250 FiringEmployees(树形dp)

    有一个 \(n\) 个点的树,每个点有点权(点权可能为负) ,求包含点\(1\)的最 大权连通子图(的权值和) 。 \(n \leqslant 2500\)

    attack

扫码关注云+社区

领取腾讯云代金券