题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
解题思路:使用multiset存储k个最小值
1)先存入k个值
2)用multiset中的最大值和当前访问数组元素比较,若小于则把该值从multiset中移除,数组元素插入
3)遍历multiset将k个值存入vector中
注意事项:边界条件的判断,数组为空,k小于1,以及k大于数组元素数目

 1 class Solution {
 2 public:
 3     vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
 4         vector<int> result;
 5         if(input.empty() || k<1 || input.size()<k)
 6             return result;
 7         multiset<int> insert_set;
 8
 9         set<int>::iterator it; //定义前向迭代器
10         multiset<int>::reverse_iterator rit; //定义反向迭代器
11         for(int i=0;i<input.size();i++)
12         {
13
14             if(i<k)
15             {
16                 insert_set.insert(input[i]);
17             }
18
19             else
20             {
21                 rit = insert_set.rbegin();
22                 if(input[i] < *rit)
23                 {
24
25                     insert_set.erase(*rit);
26                     insert_set.insert(input[i]);
27                 }
28             }
29         }
30
31
32         for(it = insert_set.begin(); it != insert_set.end(); it++)
33         {
34             result.push_back(*it);
35         }
36         return result;
37     }
38 };

转载于:https://www.cnblogs.com/qqky/p/6929074.html

29、剑指offer--最小的K个数相关推荐

  1. 剑指offer 最小的k个数 leetcode 215. Kth Largest Element in an Array

    注意multiset的一个bug: multiset带一个参数的erase函数原型有两种.一是传递一个元素值,如上面例子代码中,这时候删除的是集合中所有值等于输入值的元素,并且返回删除的元素个数:另外 ...

  2. 剑指offer 最小的k个数

    输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 排序解决的. import java.util.*; public clas ...

  3. 剑指offer——最小的K个数和数组中第K大的元素

    解题思路: 乘着做这个题,顺便复习下堆排序. 先说堆排序是一个什么东西:https://blog.csdn.net/u013384984/article/details/79496052 大顶堆升序, ...

  4. 剑指Offer_29_最小的K个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 解题思路 解法1 大顶堆,存放k个数字,遍历数组,当堆的数量小于k ...

  5. 剑指offer40 最小的k个数

    这个题目最坑的是 这个输入的k是几 那么输出的个数就是几 如果全是重复的 比如[1,1,1,1,1,1,1] 如果k=2 那么只能输出[1,1] 题目给的这两个样例完全不能体现这一点啊! 而且第一个样 ...

  6. 剑指offer之求两个数之和(不能使用四则运算)

    1 题目 剑指offer之求两个数之和(不能使用四则运算) 2 代码实现 #include<stdio.h>int add(int num1, int num2) {int sum1;in ...

  7. 剑指offer||3 前n个数二进制数中1的个数

    思路1:递归(消耗大) 如果是奇数,return  去掉最后一位二进制数1 的个数+1 如果是偶数,return 去掉最后一位二进制数1个数 class Solution { public: int ...

  8. 剑指offer做题记录

    1. 剑指 Offer 03. 数组中重复的数字   力扣 class Solution { public:int findRepeatNumber(vector<int>& nu ...

  9. 算法题解(剑指Offer篇)

    文章目录 栈与队列(简单) *剑指 Offer 09. 用两个栈实现队列 - 12.27 剑指 Offer 30. 包含min函数的栈 - 12.27 链表(简单) *剑指 Offer 06. 从尾到 ...

最新文章

  1. java 关键字(面试题)
  2. Nginx基本配置、性能优化指南
  3. 那个14岁上大学、17岁读博、24岁当教授的天才神童,如今怎么样了?
  4. jquery 根据class名 赋值_jQuery简单用法!!!
  5. android hardware architecture
  6. JBoss BPM Suite 6.0.3版本的5个实用技巧
  7. Android Camera详解
  8. dxf转g代码_恶意代码分析系列几种常用技术(2)
  9. linux下nginx的基本使用
  10. mysql instead of触发_Instead of触发器
  11. 生产过程代码分析(二)--估计
  12. Lesson 05 for Plotting in R for Biologists
  13. couldn't open file: data/coco.names
  14. Directx游戏中嵌入IE浏览器实现过程
  15. 逻辑库、物理库、分库分表(TDDL)
  16. Axure获取焦点和触发事件
  17. 像素越多越好?像元的面积越小越好?为何底大一级压死人?
  18. docker官方文档翻译5
  19. jacod 使用 WPS或 office相关注册表信息
  20. Redis--AKF架构

热门文章

  1. python手机版打了代码运行不了-如何用iPad运行Python代码?
  2. python做直方图-python实现直方图的应用
  3. pythonis啥意思-Python基础:is和==的区别
  4. python 命令行参数-Python命令行参数处理
  5. python官网下载步骤linux-CentOS 7.* 安装 python3.8.2 步骤
  6. monty python life of brian-电影Life of Brian 万世魔星
  7. python面试题及答案-Python 45道基本面试题及答案 (新手非常有用)
  8. 如何使用python批量下载-用Python调用迅雷实现后台批量下载
  9. 为什么叫python编程-中小学生为什么要学Python编程
  10. python零基础电子书免费下载-零基础学Python