解题思路:小根堆,每次从小根堆中取出最小的,并重新构建小跟堆,最后返回k个放集合里

import java.util.*;public class Solution {public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {if (input == null || input.length == 0 || k <= 0 || k > input.length) {return new ArrayList<Integer>() ;}int size = input.length - k;PriorityQueue<Integer> minQueue = new PriorityQueue<>((o1, o2)->o1 - o2);int i = 0;for (; i <= size; i++) {minQueue.offer(input[i]);}ArrayList<Integer> list = new ArrayList<>();list.add(minQueue.peek());for (; i < input.length; i++) {minQueue.poll();minQueue.offer(input[i]);list.add(minQueue.peek());}return list;}
}

解法二:大根堆(存储k个元素),每次比较根与当前值的大小,当前值小先把跟移除,再把当前值放到根里,重新维护这个大根堆。

import java.util.*;public class Solution {public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {if (input == null || input.length == 0 || k <= 0 || k > input.length) {return new ArrayList<Integer>() ;}PriorityQueue<Integer> queue = new PriorityQueue<>((o1, o2)->o2 - o1);ArrayList<Integer> list = new ArrayList<>();int i = 0;for (; i < k; i++) {queue.offer(input[i]);}for (; i < input.length; i++) {if (input[i] < queue.peek()) {queue.poll();queue.offer(input[i]);}}while (!queue.isEmpty()) {list.add(queue.poll());}return list;}
}

方法三:使用系统自带的排序

import java.util.*;public class Solution {public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {if (input == null || input.length == 0 || k <= 0 || k > input.length) {return new ArrayList<Integer>() ;}ArrayList<Integer> list = new ArrayList<>();Arrays.sort(input);for (int i = 0; i < k; i++) {list.add(input[i]);}return list;}
}

BM46 最小的 K 个数相关推荐

  1. BM46 最小的K个数

    1.题目 2.思路 最简单的一种方式就是排序后,取前k个值,即可.关键在在于你怎么选择以及写排序算法. 3.代码 import java.util.ArrayList;public class Sol ...

  2. 伍六七带你学算法 入门篇-最小的k个数

    java面试题-最小的k个数 难度-简单 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:a ...

  3. 剑指offer 40.最小的 K 个数 python代码

    题目 寻找数组中的最小的k个数,也叫topk问题. 牛客网测试地址 注意: 牛客网的提交需要将最终的结果排序 思路 快速排序的 partition() 方法,会返回一个整数 j 使得 a[l-j-1] ...

  4. 剑指offer: 面试题40. 最小的k个数

    题目:最小的k个数 入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:arr = [3,2,1] ...

  5. C++实现用堆求最小的k个数

    参考:http://t.jobdu.com/thread-8094-1-1.html http://blog.chinaunix.net/uid-26548237-id-3513260.html ht ...

  6. 【剑指offer-Java版】30最小的K个数

    最小的K个数: 思路一:类似于第29题,直接进行Partion,直到返回值未K – 缺点是需要修改输入的数据 思路二:维护一个大顶堆,然后遍历一次给定数组 如果当前堆元素小于K个 那么直接将当前元素加 ...

  7. 【Java】 剑指offer(40) 最小的k个数

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7 ...

  8. 在哪里能收到python实例代码-Python找出最小的K个数实例代码

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复 ...

  9. 九度 1371 最小的K个数

    题目描述:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 输入: 每个测试案例包括2行:第一行为2个整数n,k(1<= ...

最新文章

  1. ACE线程管理机制-并发控制(4)
  2. python条件表达式连起来写一段话_python学习笔记十三条件表达式应用
  3. 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换...
  4. sizeof string
  5. 3.2生产者和消费者(Producers and Consumers)
  6. 第三讲 对话框的创建
  7. [转]优化MySQL数据库性能的八大“妙手”
  8. 实战篇:如何用Keras建立神经网络(附全部代码) 1
  9. Android 安装 GMS 方法
  10. Electron学习笔记(一) 配置, 创建, 设置, 监听
  11. 西门子1200控制V90伺服,西门子1200通过PN通讯控制 V90伺服,程序控制采用FB285功能块
  12. Java学习 day7 (常用API)Scanner类.Random类.Arraylist类
  13. C++仿照标准字符串类string,设计一个自己的字符串类String
  14. 【数据结构】-期末复习或者考研复习资料文档
  15. zurb是什么网站_Zurb的Tribute库的Vue.js包装器,用于本机@mentions
  16. 联邦滤波算法封装Matlab函数
  17. 从零开始编写一个上位机(串口助手)QT Creator + C++
  18. 远程连接服务器软件——十大常见的服务器管理软件
  19. 《版式设计——日本平面设计师参考手册》目录—导读
  20. 计算机心理部的活动记录表,心理部工作总结的参考范文

热门文章

  1. 一些javascript内容
  2. 苹果 CEO 为什么选中了何同学?
  3. HTML基本标签归纳总结
  4. 智能汽车里究竟“藏”有多少传感器?
  5. 怎么用超级文档免费制作调查问卷
  6. Python 小提琴图(violinplot)
  7. 微信小程序require报错
  8. 【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用
  9. js 时间转东八区_js将UTC时间转化为当地时区时间
  10. 在谷歌和ie上加入mp4格式的视频