剑指offer 最小的K个数

剑指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;
    }
};
弹钢琴的猫 /
Published under (CC) BY-NC-SA in categories 算法  tagged with 剑指offer