《剑指offer》面试题30——最小的k 个数
《剑指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 个数相关推荐
- 剑指offer面试题[30]-最小的k个数
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 分析思路: 这道题最简单的思路莫过于把输入的n个数排 ...
- 剑指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] ...
- 剑指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 ...
- 剑指offer面试题40. 最小的k个数(sort函数)
题目描述 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 思路 详见链接 代码 class Solution: ...
- 剑指 Offer II 061. 和最小的 k 个数对
链接:剑指 Offer II 061. 和最小的 k 个数对 题解: class Solution { public:vector<vector<int>> kSmallest ...
- 【剑指offer-Java版】30最小的K个数
最小的K个数: 思路一:类似于第29题,直接进行Partion,直到返回值未K – 缺点是需要修改输入的数据 思路二:维护一个大顶堆,然后遍历一次给定数组 如果当前堆元素小于K个 那么直接将当前元素加 ...
- 【剑指Offer】29、最小的K个数
题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 解题思路: 本题最直观的解法就是将输入的n个整数排 ...
- 剑指Offer——面试题30:最小的K个数
题目:输入N个数字,找出其中最小的K个数. 思路:维护一个数组KMin,长度为K,存放最小的K个数.遍历原始数组的过程中,如果KMin不满,就直接在后边插入新的数字:如果KMin满了,就要找到其中最大 ...
- 面试题30.最小的k个数
题目:输入n个整数,找出其中最小的k个数,例如输入4,5,1,6,2,7,3,8 这8个数字,则最小的四个数字为1,2,3,4, 这道题是典型的TopK问题,剑指Offer提供了两种方法来实现,一种方 ...
- 剑指offer面试题30. 包含min函数的栈(辅助栈)
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 思路 详见链接 代码 class Min ...
最新文章
- python 十大经典排序算法
- 快递员依据管理中心发来收件信息
- idea tomcat热部署_IDEA设置热部署
- python爬虫流程-小白必看的Python爬虫流程
- Spring面试题和答案
- 苹果应用上架,图片的要求(2017年4月27日)
- pythopn 函数(内置函数)
- 说说a标签的onclick和href
- elastaticresearch 学习过程
- Kalman Filter—Data Fusion, Covarince Matrix, State Space Representation, Observation
- java配环境变量_用于 Java 开发的配置工具 Simple Configuration Facade
- 鸿鹄系统和鸿蒙系统区别,鸿蒙系统现身,搭配升降式镜头和鸿鹄芯片,你以为是手机?...
- 机床电气课程设计(自己总结)
- 死磕Mosek!新mosek学习笔记1:VS项目配置。
- 一个广告资源运营管理中台系统简介
- STFT原理及MATLAB代码
- git mertool使用kdiff3解决冲突合并
- FMI飞马网 | AI人工智能/大数据/Database/Linear Algebra/Python/机器学习/Hadoop 有哪些书籍?福利可下载!
- 已经买好了域名后怎么建立一个网站
- html 表格选择滚动条,table设置tbody滚动条
热门文章
- sklearn svm 调参_用 Grid Search 对 SVM 进行调参
- PyCharm安装配置Django,启动第一个Django项目Hello World
- 人脸图像特征提取方法(HOG、Dlib、CNN)简述
- mysql数据量很少查询却很慢_Mysql索引
- C#:JObject、JArray、JProperty、JValue作用
- 电子邮件是html文件吗,如何在电子邮件正文中嵌入HTML文件
- 图解递归调用过程(Python)
- OpenCV_(Fit Line with points)用直线拟合一组点
- 线性代数【一】:行列式的概念与计算
- 数值分析(4)-多项式插值: 埃尔米塔插值法