剑指Offer- 最小的k个数

题目描述 [最小的k个数]

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

解题思路

维护一个最小堆

代码

class Solution {
public:
    void maxHeap(vector &nums, int i, int high){
        int left = 2*i+1, right = 2*i+2;
        int largest;
        if(left &nums){
        for(int i=nums.size()/2-1; i>=0; i--){
            maxHeap(nums, i, nums.size());
        }
    }
    void heapSort(vector &nums){
        bulidHeap(nums);
        for(int i=nums.size()-1; i>0; i--){
            swap(nums[0], nums[i]);
            maxHeap(nums, 0, i);
        }
    }

    vector GetLeastNumbers_Solution(vector input, int k) {
        int n=input.size();
        vector res;
        if(input.size() < k || k <= 0) return res;

        vector nums(input.begin(), input.begin()+k);
        heapSort(nums);

        for(int i=k;i

二刷

嗯,自己写堆太累,笔试面试一时半会也写不好

class Solution {
public:
    vector GetLeastNumbers_Solution(vector input, int k) {
        vector res;
        if(input.size()

你可能感兴趣的:(剑指Offer- 最小的k个数)