博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer | 最小的K个数
阅读量:5061 次
发布时间:2019-06-12

本文共 1002 字,大约阅读时间需要 3 分钟。

题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

题目解析:首先想到的就是插入法,。改进一下就是前面一直保持7个有序数字。遍历剩下数组,元素若小于最大值就交换。用C++的set来解决代码就简洁多了,删除插入都是logk。

 

代码如下:

1 class Solution { 2 public: 3     vector
GetLeastNumbers_Solution(vector
input, int k) { 4 set
kset; 5 if(k <= 0 || input.size() < unsigned(k)) return vector
(0); 6 vector
::iterator iter = input.begin(), iend = input.end(); 7 while(k--) { 8 kset.insert(*iter++); 9 }10 11 while(iter != iend) {12 if(*iter < *kset.rbegin()) {13 kset.erase(*kset.rbegin());14 kset.insert(*iter++);15 }16 else ++iter;17 }18 19 vector
ans(kset.begin(), kset.end());20 return ans;21 }22 };

拓展:quick select

转载于:https://www.cnblogs.com/excavator/p/4824762.html

你可能感兴趣的文章
虚拟中没有eth0
查看>>
Unity 3D游戏开发学习路线(方法篇)
查看>>
BZOJ2049[Sdoi2008]Cave 洞穴勘测(LCT模板)
查看>>
vuex插件
查看>>
2011年12月09日
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
合并单元格
查看>>
swift-初探webView与JS交互
查看>>
IOS-图片操作集合
查看>>
Android bitmap图片处理
查看>>
Android应用程序进程启动过程的源代码分析
查看>>
adb logcat 命令行用法
查看>>
Redis学习手册(Key操作命令)
查看>>
模板统计LA 4670 Dominating Patterns
查看>>
泛型第23条:请不要在新代码中使用原生态类型
查看>>
非对称加密
查看>>
bzoj 3413: 匹配
查看>>
从下周开始就要采用网上记录值班日志了
查看>>
在qq中可以使用添加标签功能
查看>>
eclipse 自定义布局
查看>>