BM46 最小的 K 个数
解题思路:小根堆,每次从小根堆中取出最小的,并重新构建小跟堆,最后返回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 个数相关推荐
- BM46 最小的K个数
1.题目 2.思路 最简单的一种方式就是排序后,取前k个值,即可.关键在在于你怎么选择以及写排序算法. 3.代码 import java.util.ArrayList;public class Sol ...
- 伍六七带你学算法 入门篇-最小的k个数
java面试题-最小的k个数 难度-简单 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:a ...
- 剑指offer 40.最小的 K 个数 python代码
题目 寻找数组中的最小的k个数,也叫topk问题. 牛客网测试地址 注意: 牛客网的提交需要将最终的结果排序 思路 快速排序的 partition() 方法,会返回一个整数 j 使得 a[l-j-1] ...
- 剑指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] ...
- C++实现用堆求最小的k个数
参考:http://t.jobdu.com/thread-8094-1-1.html http://blog.chinaunix.net/uid-26548237-id-3513260.html ht ...
- 【剑指offer-Java版】30最小的K个数
最小的K个数: 思路一:类似于第29题,直接进行Partion,直到返回值未K – 缺点是需要修改输入的数据 思路二:维护一个大顶堆,然后遍历一次给定数组 如果当前堆元素小于K个 那么直接将当前元素加 ...
- 【Java】 剑指offer(40) 最小的k个数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7 ...
- 在哪里能收到python实例代码-Python找出最小的K个数实例代码
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复 ...
- 九度 1371 最小的K个数
题目描述:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 输入: 每个测试案例包括2行:第一行为2个整数n,k(1<= ...
最新文章
- ACE线程管理机制-并发控制(4)
- python条件表达式连起来写一段话_python学习笔记十三条件表达式应用
- 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换...
- sizeof string
- 3.2生产者和消费者(Producers and Consumers)
- 第三讲 对话框的创建
- [转]优化MySQL数据库性能的八大“妙手”
- 实战篇:如何用Keras建立神经网络(附全部代码) 1
- Android 安装 GMS 方法
- Electron学习笔记(一) 配置, 创建, 设置, 监听
- 西门子1200控制V90伺服,西门子1200通过PN通讯控制 V90伺服,程序控制采用FB285功能块
- Java学习 day7 (常用API)Scanner类.Random类.Arraylist类
- C++仿照标准字符串类string,设计一个自己的字符串类String
- 【数据结构】-期末复习或者考研复习资料文档
- zurb是什么网站_Zurb的Tribute库的Vue.js包装器,用于本机@mentions
- 联邦滤波算法封装Matlab函数
- 从零开始编写一个上位机(串口助手)QT Creator + C++
- 远程连接服务器软件——十大常见的服务器管理软件
- 《版式设计——日本平面设计师参考手册》目录—导读
- 计算机心理部的活动记录表,心理部工作总结的参考范文