《剑指offer》面试题30——最小的k 个数
#1.题目描述:
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

#2.解题思路:
1。全排序。时间复杂度O(nlogn)。
2。Partiton思想 ——用快速排序,时间复杂度O(n) 。
3。最大堆 时间复杂度O(nlogk)
4。红黑树:multiset集合。

#3.代码实现:

###3.1.方法1代码

#include<algorithm>
#include<iostream>
#include <vector>using namespace std;vector<int> GetLeastNumbers_Solution(vector<int> input, int k){vector<int> res;res.clear();if(input.empty()||k>input.size())return res;sort( input.begin(), input.end());for(int i=0; i<k; i++)res.push_back(input[i]);return res;}void Print1Dvec(vector<int> myarray)
{if(myarray.size()==0)cout<<"vector为空"<<endl;int num=myarray.size();for(int i=0; i<num;i++)cout<<myarray[i]<<"  ";cout<<endl;
}int main()
{vector<int>vec={1,5,1,1,1,7,1,8};Print1Dvec(vec);vector<int>vec2=GetLeastNumbers_Solution(vec  ,4);Print1Dvec(vec2);return 0;
}

运行结果:

1  5  1  1  1  7  1  8
1  1  1  1Process returned 0 (0x0)   execution time : 0.429 s
Press any key to continue

方案4代码:


//multiset
//当容器中的元素数量不够k 个时,直接放入容器中
//当容器中的元素数量满k个时,,把当前数组中的元素与容器中的最大的元素比较。
//如果当前元素值小于容器中的最大值,则将容器中的最大值替换为当前值。#include<iostream>
#include <vector>
#include<set>using namespace std;//typedef multiset<int, greater<int>>  intSet;
//typedef multiset<int, greater<int>>::iterator setiter;vector<int> GetLeastNumbers_Solution(vector<int> input, int k){multiset<int, greater<int>>  LeastNumber ;if(input.size()<=0||k>input.size())return vector<int> ();//仿函数中的greater<T>模板,从大到小排序vector<int>::iterator itervec=input.begin();for(; itervec!=input.end();  itervec++ ){if(LeastNumber.size()<k)                      //当容器中的元素数量不够k 个时,直接放入容器中LeastNumber.insert(*itervec);else                                                         //当容器中的元素数量满k个时,,把当前数组中的元素与容器中的最大的元素比较。{multiset<int, greater<int>>::iterator  Itergreast=LeastNumber.begin();if(*itervec<*Itergreast){LeastNumber.erase( Itergreast);   //删除迭代器指针指向的元素LeastNumber.insert(*itervec);   //插入元素值}}}return vector<int>(LeastNumber.begin(),LeastNumber.end());}void Print1Dvec(vector<int> myarray)
{if(myarray.size()==0)cout<<"vector为空"<<endl;int num=myarray.size();for(int i=0; i<num;i++)cout<<myarray[i]<<"  ";cout<<endl;
}int main()
{vector<int>vec={1,5,1,1,1,7,1,8};Print1Dvec(vec);vector<int>vec2=GetLeastNumbers_Solution(vec  ,4);Print1Dvec(vec2);return 0;
}

运行结果:

1  5  1  1  1  7  1  8
1  1  1  1 Process returned 0 (0x0)   execution time : 0.446 s
Press any key to continue.

《剑指offer》面试题30——最小的k 个数相关推荐

  1. 剑指offer面试题[30]-最小的k个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 分析思路:         这道题最简单的思路莫过于把输入的n个数排 ...

  2. 剑指offer: 面试题40. 最小的k个数

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

  3. 剑指Offer - 面试题40. 最小的k个数(排序/大顶堆)

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

  4. 剑指offer面试题40. 最小的k个数(sort函数)

    题目描述 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 思路 详见链接 代码 class Solution: ...

  5. 剑指 Offer II 061. 和最小的 k 个数对

    链接:剑指 Offer II 061. 和最小的 k 个数对 题解: class Solution { public:vector<vector<int>> kSmallest ...

  6. 【剑指offer-Java版】30最小的K个数

    最小的K个数: 思路一:类似于第29题,直接进行Partion,直到返回值未K – 缺点是需要修改输入的数据 思路二:维护一个大顶堆,然后遍历一次给定数组 如果当前堆元素小于K个 那么直接将当前元素加 ...

  7. 【剑指Offer】29、最小的K个数

      题目描述:   输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4.   解题思路:   本题最直观的解法就是将输入的n个整数排 ...

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

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

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

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

  10. 剑指offer面试题30. 包含min函数的栈(辅助栈)

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 思路 详见链接 代码 class Min ...

最新文章

  1. python 十大经典排序算法
  2. 快递员依据管理中心发来收件信息
  3. idea tomcat热部署_IDEA设置热部署
  4. python爬虫流程-小白必看的Python爬虫流程
  5. Spring面试题和答案
  6. 苹果应用上架,图片的要求(2017年4月27日)
  7. pythopn 函数(内置函数)
  8. 说说a标签的onclick和href
  9. elastaticresearch 学习过程
  10. Kalman Filter—Data Fusion, Covarince Matrix, State Space Representation, Observation
  11. java配环境变量_用于 Java 开发的配置工具 Simple Configuration Facade
  12. 鸿鹄系统和鸿蒙系统区别,鸿蒙系统现身,搭配升降式镜头和鸿鹄芯片,你以为是手机?...
  13. 机床电气课程设计(自己总结)
  14. 死磕Mosek!新mosek学习笔记1:VS项目配置。
  15. 一个广告资源运营管理中台系统简介
  16. STFT原理及MATLAB代码
  17. git mertool使用kdiff3解决冲突合并
  18. FMI飞马网 | AI人工智能/大数据/Database/Linear Algebra/Python/机器学习/Hadoop 有哪些书籍?福利可下载!
  19. 已经买好了域名后怎么建立一个网站
  20. html 表格选择滚动条,table设置tbody滚动条

热门文章

  1. sklearn svm 调参_用 Grid Search 对 SVM 进行调参
  2. PyCharm安装配置Django,启动第一个Django项目Hello World
  3. 人脸图像特征提取方法(HOG、Dlib、CNN)简述
  4. mysql数据量很少查询却很慢_Mysql索引
  5. C#:JObject、JArray、JProperty、JValue作用
  6. 电子邮件是html文件吗,如何在电子邮件正文中嵌入HTML文件
  7. 图解递归调用过程(Python)
  8. OpenCV_(Fit Line with points)用直线拟合一组点
  9. 线性代数【一】:行列式的概念与计算
  10. 数值分析(4)-多项式插值: 埃尔米塔插值法