剑指offer 最小的K个数
- 题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
- 解法
排序,O(nlogn);当然,因为不需要对整个数组进行排序,所以也可以用选择或者交换排序;还可以用堆排序,建立k个元素的最大堆,取元素与堆顶元素比较,如果小于堆顶元素,就替换掉,直到遍历完所有元素;还可以用快速排序,即利用放好位置的那个元素来划分数组,用的是分治思想。
//using function sort()
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
vector<int> ret;
if (input.size() == 0 || k>input.size())
return ret;
sort(input.begin(), input.end());
for (int i = 0; i < k; ++i)
ret.push_back(input[i]);
return ret;
}
};