剑指offer(29)—最小的K个数
来源:互联网 发布:奥米姿淘宝 编辑:程序博客网 时间:2024/05/23 19:18
最小的K个数
题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
思路
解法1:利用Partition函数,第
解法2:建立一个大小为k的容器,想填满该容器,并确定出其中的最大值,读取下一个数时,若大于最大值,则继续读取下一个数;否则,替换当前最大值,并重新确定调整后的容器中的最大值,继续读取下一个数,时刻保持容器中存储的是当前为止的最小的k个数。(最大堆)
解法3:红黑树,利用STL中的set或multiset
代码
解法1:
class Solution {public: int Partition(vector<int>& nums, int start, int end){ int key = nums[start]; while(start < end){ while(start < end && nums[end] >= key) end--; swap(nums[start], nums[end]); while(start < end && nums[start] <= key) start++; swap(nums[start], nums[end]); } return start; } vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { int len = input.size(); vector<int> res; if(len == 0 || k <= 0 || k > len) return res; int start = 0, end = len - 1; int index = Partition(input, start, end); while(index != (k-1)){ if(index > k-1){ end = index - 1; index = Partition(input, start, end); }else{ start = index + 1; index = Partition(input, start, end); } } for(int i = 0; i < k; i++) res.push_back(input[i]); return res; }};
阅读全文
0 0
- 剑指offer 29 最小的k个数
- 剑指offer—最小的K个数
- 剑指offer — 最小的k个数
- 剑指Offer——(29)最小的k个数
- 剑指Offer—29—最小的 K 个数
- 剑指offer(29)—最小的K个数
- 剑指offer:最小的k个数
- 【剑指offer】最小的k个数
- 剑指offer-30:最小的k个数
- 最小的k个数(剑指offer)
- 剑指offer--最小的K个数
- 剑指Offer之 - 最小的k个数
- 剑指offer-30 最小的K个数
- 剑指offer之最小的k个数
- 剑指offer 30 - 最小的k个数
- 《剑指offer》最小的K个数
- 【剑指Offer】最小的K个数
- 剑指Offer-30-最小的k个数
- java解析javascript方法,scriptengine初体验,实现后台调用js方法验证。
- 磁盘规划 迁移/home
- MongoDB数据库安装配置和基本操作
- 7. Reverse Integer(反转整型) —— Java
- java八种基本数据类型
- 剑指offer(29)—最小的K个数
- 关于Edittext首位为0多种情况考虑
- WEB 输入校验正则表达式
- requests库入门-11-自定义请求
- 判断字符数组中是否所有的字符只出现了一次(左程云)非递归堆排序实现
- UGUI 学习笔记 2 静态字体
- poj 3616 Milking Time
- 软件测试——测试流程重要性
- LeetCode(38)--Count and Say