最小的K个数
来源:互联网 发布:淘宝虚假交易处罚规则 编辑:程序博客网 时间:2024/06/11 15:43
题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
算法1:
partition方法,找到index = k+1位置的数字,那么前边的数字为所求。
算法2:
海量数据处理算法,维护一个k的最大堆,从头遍历数组,如果数字小于堆中最大值,则删除堆顶然后insert新值。
STL :
multiset是由红黑树底层实现,红黑树是BST,最懂排序:
multiset
class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> res; if(input.size() == 0||k > input.size() || k < 1) return res; //构造大顶堆,和大顶堆指针 multiset<int,greater<int>> mt; multiset<int,greater<int>> ::iterator it; //遍历n数组,如果mt中没有k个数直接插入;如果mt中已经满了,则比较堆顶和新元素大小. for (int i = 0; i < input.size(); ++i) { if(mt.size() < k) mt.insert(input[i]); else{ it = mt.begin(); if(input[i] < *it){ mt.erase(it); mt.insert(input[i]); } } } //将mt中元素导入vector it = mt.end(); it--; for (; it != mt.begin() ; --it) { res.push_back(*it); } it = mt.begin(); res.push_back(*it); return res; }};
0 0
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的K个数
- 最小的k个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的k个数
- 最小的k个数
- Qt多窗口切换程序
- 线性筛
- mac 反编译apk
- Session,Cookie,Application和ViewState这四者的有何区别
- 安装tomcat
- 最小的K个数
- Qt:拖拽图片到QLabel上并显示
- dwr环境搭建实例
- 简单排序之直接插入排序
- Guacamole——2.本地安装Guacamole
- Java集合概述--HashSet类解析
- QT中如何设置窗体的背景图片。
- 111
- 泛型参数类型获取异常问题解决 java java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType