最小的K个数
2015-09-08 10:34
288 查看
题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。基本方法:
思路一:
在K个数的数组中多次排序,每次替换掉最大的,直到原数组中的数比较完;
代码:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { int len = input.size(); vector<int> vec; if(len == 0 || k <=0 || k > len) return vec; int count = 0; for(int i = 0;i < k;i++){ vec.push_back(input[i]); } for(int i = k;i < len;i++){ sort(vec.begin(),vec.end()); if(input[i] < vec[k-1]) vec[k-1] = input[i]; } return vec; }思路二:
利用最小堆排序:
代码如下:
void heapSort(vector<int> &input, int root, int end){ for(int j = end -1; j >= root; j --){ int parent = (j + root -1)/2; if(input[parent] > input[j]){ int temp = input[j]; input[j] = input[parent]; input[parent] = temp; } } } public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> result ; if(k > input.size()) return result; for(int i = 0; i < k ; i ++){ heapSort(input,i,input.size()); result.push_back(input[i]); } return result; }
相关文章推荐
- 《C++入门经典(第4版)》之C++编程总结
- php 字符和字节
- 【交换机在江湖】第十一章 接口配置锦囊妙计之三----端口自协商
- 国际冠码与国码表
- 使用 shell 加载配置文件
- POJ C++程序设计 编程题#1 编程作业—STL2
- root根目录修改后的PS1恢复
- Android UI系列-----ScrollView和HorizontalScrollView
- 国际冠码与国际电话区号
- C#完美读取CSV
- 架构设计:负载均衡层设计方案(6)——Nginx + Keepalived构建高可用的负载层
- Oracle OVER函数DEMO
- Category添加属性
- Web安全之权限攻击
- Ajax提高篇(2)DOM进行Web响应
- Ajax提高篇(3)在请求和响应中使用 XML(1)
- Ben Brode:如何成为一个游戏策划
- CSS中的浮动和定位
- Unity 2D游戏开发教程之游戏中精灵的跳跃状态
- nginx响应与处理请求的方法详解