微软面试题<五>
2013-04-18 19:50
260 查看
题目:
查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。
这里采用的是STL的最大堆来解决,先取k个元素建堆,然后取剩下的元素与堆中的最大值进行比较,若小于堆中的最大值,则该值进堆,进行若干次循环,即可得到结果.
代码实现:
查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。
这里采用的是STL的最大堆来解决,先取k个元素建堆,然后取剩下的元素与堆中的最大值进行比较,若小于堆中的最大值,则该值进堆,进行若干次循环,即可得到结果.
代码实现:
#include <iostream> #include <algorithm> #include <vector> #include <functional> using namespace std; bool Find_K_Min(vector<int> &data,int k); int main() { int n,x,k; cin>>n>>k; vector<int> a; for(int i=0;i<n;++i) { cin>>x; a.push_back(x); } Find_K_Min(a,k); for(vector<int> ::iterator it1=a.begin();it1!=a.begin()+k;++it1) cout<<*it1<<" "; system("pause"); return 0; } bool Find_K_Min(vector<int> &data,int k) { if(k==0||data.size()<k) return false; make_heap(data.begin(),data.begin()+k); for(vector<int> ::iterator it=data.begin()+k;it!=data.end();++it) { if((*it)<(*data.begin())) { *data.begin()=*it; make_heap(data.begin(),data.begin()+k); } } sort_heap(data.begin(),data.begin()+k); return true; }
相关文章推荐
- 微软面试题<二>
- 微软面试题<一>
- 微软面试题<四>
- 微软面试题<十>
- 微软面试题<七>
- 微软面试题<三>
- 【MySql】使用记录<五>
- Android UI设计之<五>自定义DrawView组件,实现数字签名效果
- Spring-jdbc-事务处理详解及案例<五>
- Nop- Automapper在Nopcommerce中的使用<五>
- 《实用OpenCV》<五> 图像滤波(4)
- JPA开发总结<五>--多对多双向关联
- UML参考手册 第三部分 参 考 资 料 第13章 术 语 大 全 <五>
- 黑马程序员 JAVA基础<五> IO流
- java从0单排之<<java就业培训教程>>复习与面试题回顾——01
- 一步步优化JVM<五>:优化延迟或者响应时间(3)
- Android NDK学习 <五> C++ 支持
- 网络安全基础篇之<五>
- 在Ignite大会上,微软对Android开了一炮<3>
- java微信网页授权获取用户信息以及JSSDK自定义分享等功能<五>