首页 > 试题广场 >

最小的K个数

[编程题]最小的K个数
  • 热度指数:1196981 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。
数据范围:,数组中每个数的大小
要求:空间复杂度 ,时间复杂度 O(nlogk)

示例1

输入

[4,5,1,6,2,7,3,8],4 

输出

[1,2,3,4]

说明

返回最小的4个数即可,返回[1,3,2,4]也可以        
示例2

输入

[1],0

输出

[]
示例3

输入

[0,1,2,1,2],3

输出

[0,1,1]
头像 牛客题解官
发表于 2020-06-01 14:38:45
精华题解 描述 这是一篇针对初学者的题解。共用三种方法解决。知识点:数组,堆,快排难度:二星 题解 题目抽象:求给定数组的topK小问题。 方法一:排序 直接排序,然后去前k小数据。 代码 class Solution { public: vector<int> GetLeastNum 展开全文
头像 Peterliang
发表于 2021-06-23 09:19:56
精华题解 题意分析 根据题目我们可以知道,就是给出一个数组,让我们求出最小的k个数字所构成的数组。如果不足以构成k个数字,那么就返回一个空数组。 样例解释,这里我用的是第二种解法 思路分析 解法一 根据题目的要求,需要我们求出最小的k个数字,对于这种有大小顺序的情况,我们很容易想到的就是先进行排序 展开全文
头像 牛客题解官
发表于 2022-04-22 12:19:02
精华题解 题目主要信息: 对于一个给定无序数组,返回最小的k个元素,顺序任意 k和数组有特殊情况需要单独讨论 举一反三: 学习完本题的思路你可以解决如下题目: BM48. 数据流中的中位数 BM5. 合并k个有序链表 方法一:堆排序(推荐使用) 知识点:优先队列 优先队列即PriorityQueue,是一 展开全文
头像 NumPy
发表于 2021-06-28 19:44:02
精华题解 一、题目描述 JZ29 最小的K个数题目大意:给定一个数组, 找出其中最小的k个数注意审题:若k大于数组的长度, 就返回空数组 二、算法1(排序) 解题思路 说到求最小(或最大)的k个数这一类问题, 我们一般是想法就是先对数组进行排序,然后取边缘连续的k个数即可 要求最小的k个数, 我们可以将数组 展开全文
头像 ZwZ呀咿呀咿哟
发表于 2020-01-31 16:49:10
对于n个整数中最小的K个数的查找,可以使用各种排序算法:冒泡/堆排/快排/希尔排序等等。将此n个整数从小到大排序之后,前k个数就是所求的结果。 但是当原数组中的数据顺序不可修改,并且n的值过于大的时候,各种排序算法要将n个数加载到内存中,即:如果是海量数据中查找出最小的k个数,那么这种办法是效 展开全文
头像 酸菜鱼想要offer
发表于 2020-04-12 22:09:37
直接使用Java自带的排序功能但是其他同学提到的如果数据过于庞大的情况就不是最优解了 import java.util.*; public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(in 展开全文
头像 ryan+
发表于 2020-05-30 00:39:41
1.将数组排序,去重。直接返回前k个数。此种方法的弊端在于遇到较大的数组时,所有的数字都将放入内存中。 # -*- coding:utf-8 -*- class Solution: def GetLeastNumbers_Solution(self, tinput, k): 展开全文
头像 一叶浮尘
发表于 2019-08-17 20:29:44
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 题目的思路还是非常简单的:维持一个K长度的最小值集合,然后利用插入排序的思想进行对前K个元素的不断更新。但是非常让人气愤的是居然if(k<= 0 || k > in 展开全文
头像 数据结构和算法
发表于 2021-03-31 15:59:50
1,先排序 这种实现方式比较简单,无论使用哪种排序方式都可以,排序之后在取前k个元素即可,代码如下 public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) { ArrayList 展开全文
头像 牛客659423677号
发表于 2021-04-01 16:50:01
-- coding:utf-8 -- class Solution: def GetLeastNumbers_Solution(self, tinput, k):     return [] if k>len(tinput) else sorted 展开全文
头像 橙子爱吃桃子
发表于 2020-05-28 11:38:32
C++简单代码/2行: class Solution { public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { sort(input.begin(), inpu 展开全文
头像 秃秃秃
发表于 2020-04-02 14:26:51
剑指offer29题:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 首先必须注意的一点是:这道题不是考察数组的排序(所以解法1不推荐),如果N特别大的话,内存存不下;这道题正确解法是:找一个数据结构存储这K个数,如果后面的 展开全文
头像 萨根的喷火龙
发表于 2021-10-20 18:05:53
四种解题思路 第一种:直接全排序,通过sort,切片返回最小的k个数 class Solution: def GetLeastNumbers_Solution(self, a, k): a.sort() return a[:k] 第二种:第一种耗时太长, 展开全文
头像 一颗闪闪发亮的马路星
发表于 2020-02-11 01:34:33
题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。这题我们可以首先发现,因为我们需要找到其中最小的k个数,所以我们可以对输入的数组进行从小到大排序,然后再根据k值遍历我们的数组,将前k个放进我们最后return回的array 展开全文