【剑指offer】最小的K个数
来源:互联网 发布:绿蔓的读音知乎 编辑:程序博客网 时间:2024/06/06 02:11
题目描述
输入N个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解:使用堆这一数据结构,时间复杂度为O(NlgK)
class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { // input为空,input元素个数少于k,k非正数,则直接返回 if(input.size() == 0 || input.size() < k || k <= 0) return vector<int>(); vector<int> heap(input.begin(), input.begin() + k); // 建堆 // 默认是最大堆,创建最小堆需添加参数greater<int>() make_heap(heap.begin(), heap.end()); for(auto it = input.begin() + k; it != input.end(); ++it){ // 最大堆的最大元素就在索引为0的位置 if(*it < heap[0]){ //先pop_heap,然后在容器中pop_back删除 pop_heap(heap.begin(), heap.end()); heap.pop_back(); //先在容器中push_back加入,再push_heap heap.push_back(*it); push_heap(heap.begin(), heap.end()); } } // 从小到大输出, k一般比较小,直接sort即可 sort_heap(heap.begin(), heap.end()); return heap; }};
阅读全文
1 0
- 剑指offer:最小的k个数
- 【剑指offer】最小的k个数
- 剑指offer-30:最小的k个数
- 最小的k个数(剑指offer)
- 剑指offer--最小的K个数
- 剑指Offer之 - 最小的k个数
- 剑指offer-30 最小的K个数
- 剑指offer之最小的k个数
- 剑指offer 30 - 最小的k个数
- 《剑指offer》最小的K个数
- 【剑指Offer】最小的K个数
- 剑指offer—最小的K个数
- 剑指Offer-30-最小的k个数
- 剑指offer:最小的K个数
- 【剑指offer】之最小的k个数
- [剑指offer:30]最小的k个数
- 剑指offer 29 最小的k个数
- 剑指offer 最小的K个数
- 面向对象三大特征
- linux command : local/locale/locate
- C++简单继承
- Android 上的低功耗蓝牙实践
- a+b
- 【剑指offer】最小的K个数
- 机器学习算法(二)逻辑斯蒂回归
- ACM国家集训队论文
- Class类(1)
- Java 中十进制和十六进制的相互转换
- [CODEVS2145]判断奇偶性
- 链表中倒数第k个结点
- EventBus的使用及接收消息的四种模式介绍
- 详解C语言中的stdin,stdout,stderr