美文网首页
53. 最小的k个数

53. 最小的k个数

作者: 蜜糖_7474 | 来源:发表于2019-11-26 17:07 被阅读0次

题目地址:https://www.acwing.com/problem/content/description/49/

AC代码 make_heap

class Solution {
public:
    vector<int> getLeastNumbers_Solution(vector<int> input, int k) {
        auto cmp = [](int a,int b){ return a>b; }; //类或者匿名函数
        make_heap(input.begin(),input.end(),cmp);
        vector<int> res;
        while(k--){
            res.push_back(input.front());
            pop_heap(input.begin(),input.end(),cmp);
            input.pop_back();
        }
        return res;
    }
};

AC代码 priority_queue

class Solution {
public:
    vector<int> getLeastNumbers_Solution(vector<int> input, int k) {
        priority_queue<int,vector<int>,greater<int>> q;
        vector<int> res;
        for(auto e:input) q.push(e);
        while(k--){
            res.push_back(q.top());
            q.pop();
        }
        return res;
    }
};

AC代码 手动建堆

class Solution {
public:
    void adjust_heap(vector<int>& v,int len,int i){
        int lc=2*i+1,rc=2*i+2,tar=i;
        while(lc<len || rc<len){
            if(lc<len && v[lc]<v[tar]) tar=lc;
            if(rc<len && v[rc]<v[tar]) tar=rc;
            if(tar!=i){
                swap(v[i],v[tar]);
                i=tar;
                lc=2*i+1;
                rc=2*i+2;
            }
            else break;
        }
    }

    void make_heap(vector<int>& v){
        for(int i=v.size()/2-1;i>=0;i--)
            adjust_heap(v,v.size(),i);
    }

    vector<int> getLeastNumbers_Solution(vector<int> input, int k) {
        make_heap(input);
        vector<int> res;
        while(k--){
            res.push_back(input[0]);
            swap(input[0],input.back());
            input.pop_back();
            make_heap(input);
        }
        return res;
    }
};

总结

复习堆

相关文章

  • 53. 最小的k个数

    题目地址:https://www.acwing.com/problem/content/description/4...

  • 算法-数组(三)

    最小的k个数 求子数组的最大和 把数组排成最小的数字 1.最小的k个数 问题描述:输入n个数字,找到数组中最小的k...

  • 最小的k个数

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

  • 最小的k个数

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

  • 最小的K个数

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

  • 最小的k个数

    参考: [1] https://www.nowcoder.com/questionTerminal/6a296eb...

  • 最小的K个数

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

  • 最小的K个数

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

  • 最小的k个数

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

  • 最小的k个数

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

网友评论

      本文标题:53. 最小的k个数

      本文链接:https://www.haomeiwen.com/subject/fgcywctx.html