描述
给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。

数据范围:0<= k,n≤10000,数组中每个数的大小010000≤val≤1000
要求:空间复杂度 O(n)O(n) ,时间复杂度 O(nlogn)O(nlogn)

方法一:排序

直接排序,然后去前k小数据。

class Solution {public:vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {vector<int> ret;if (k==0 || k>input.size()) return ret;sort(input.begin(), input.end());return vector<int>({input.begin(), input.begin()+k});  }
};

时间复杂度:O(n long n)
空间复杂度:O(1)

方法二:堆排序

建立一个容量为k的大根堆的优先队列。遍历一遍元素,如果队列大小<k,就直接入队,否则,让当前元素与队顶元素相比,如果队顶元素大,则出队,将当前元素入队

class Solution {public:vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {vector<int> ret;if (k==0 || k > input.size()) return ret;priority_queue<int, vector<int>> pq;for (const int val : input) {if (pq.size() < k) {pq.push(val);}else {if (val < pq.top()) {pq.pop();pq.push(val);}}}while (!pq.empty()) {ret.push_back(pq.top());pq.pop();}return ret;}
};

时间复杂度:O(nlongk), 插入容量为k的大根堆时间复杂度为O(longk), 一共遍历n个元素
空间复杂度:O(k)

【C++每日一练】13.最小的k个数相关推荐

  1. Leetcode 剑指 Offer 40. 最小的k个数 (每日一题 20210825)

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

  2. 漫画:BAT必考题目 (最小的k个数)

    今天分享一道比较简单的题目,希望大家可以5分钟掌握! 01 PART 最小的k个数 很简单有木有~ 最小的k个数:输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3 ...

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

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

  4. 九度 1371 最小的K个数

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

  5. 《剑指offer》-- 数组中的逆序对、最小的K个数、从1到n整数中1出现的次数、正则表达式匹配、数值的整数次方

    一.数组中的逆序对: 1.题目: 数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出 ...

  6. 海量数据中,寻找最小的k个数。

    维护k个元素的最大堆,即用容量为k的最大堆存储最小的k个数,k1设为大顶堆中最大元素.遍历一次数列,n,每次遍历一个元素x,与堆顶元素比 较,x<kmax,更新堆,否则不更新堆. 1 // 海量 ...

  7. 剑指Offer——面试题30:最小的K个数

    题目:输入N个数字,找出其中最小的K个数. 思路:维护一个数组KMin,长度为K,存放最小的K个数.遍历原始数组的过程中,如果KMin不满,就直接在后边插入新的数字:如果KMin满了,就要找到其中最大 ...

  8. 【算法】数组与矩阵问题——找到无序数组中最小的k个数

    1 /** 2 * 找到无序数组中最小的k个数 时间复杂度O(Nlogk) 3 * 过程: 4 * 1.一直维护一个有k个数的大根堆,这个堆代表目前选出来的k个最小的数 5 * 在堆里的k个元素中堆顶 ...

  9. 面试题30.最小的k个数

    题目:输入n个整数,找出其中最小的k个数,例如输入4,5,1,6,2,7,3,8 这8个数字,则最小的四个数字为1,2,3,4, 这道题是典型的TopK问题,剑指Offer提供了两种方法来实现,一种方 ...

最新文章

  1. 判断点是否在凸多边形内
  2. win10电脑黑屏只有鼠标箭头_电脑开机进入系统后显示黑屏,只能看到一个鼠标指针,如何解决?...
  3. CA证书和TLS介绍
  4. 《springcloud超级入门》Spring Cloud是什么?Spring Cloud版本介绍《二》
  5. hls二次加密 m3u8_将视频转换为m3u8,使用AES-128的方式加密HLS真的有效吗?
  6. diolog js_js组件-js插件-jquery插件-dialog对话框弹层
  7. 玩转地图投影公式,通过例题对兰伯特投影与墨卡托投影求取正反解
  8. Python爬虫之青果教务系统
  9. CMD文件的编写说明,比较详细的 1·什么是CMD文件,它有什么作用。
  10. java postgresql date_javapostgresql时区总结
  11. 一些Mac OS X技巧
  12. UE5 tiles 材质缩放平铺
  13. 怎么批量把图片转文字?教你几招轻松完成
  14. 证明残差的平均值等于0,残差以x加权的平均值为0
  15. GSM/GPRS+GPS模块SIM808
  16. 【模拟退火】[JSOI2016]炸弹攻击1
  17. mysql驱动的依赖和spring jdbc依赖是什么关系
  18. 告诉你重装系统win7方法,怎么一键重装win7系统
  19. 日语五十音图快速记忆法和搞笑版
  20. 【LAB2-Cisco】网络数据通信过程——ping不通如何排查

热门文章

  1. 4090显卡上部署 Baichuan-13B-Chat
  2. 富途实习面试(客户端开发)
  3. 字符串:字符串顺序比较、删除子字符串、字符串压缩
  4. eBPF 双子座:天使 or 恶魔?
  5. OpenCV实战之人脸美颜美型(三)——人脸关键点检测
  6. python中的变量和数组的赋值和地址的关系
  7. 神经网络中常见的激活函数
  8. D2Admin框架基本使用
  9. linux用户随机密码,Linux面试题-批量添加用户并设置8位随机密码
  10. 贩妖记 第五十五章,时冰的挑衅