53. 最小的k个数

题目地址: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;
    }
};

总结

复习堆

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最全的iOS面试题及答案 iOS面试小贴士 ———————————————回答好下面的足够了-----------...
    zweic阅读 2,730评论 0 73
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,400评论 0 6
  • 午时三刻,武场央及,群雄并起,所过劫掠,操之过急;林酣微坐,尚恬而憩,天色沧惘,小雨淅沥;高台正襟,指尖谈笑。所过...
    非涯阅读 583评论 0 0
  • 我是日记星球第176号星宝宝,我正在参加日记星球第十三期蜕变之旅,这是我的第77篇日记。如果你想在2018年获得更...
    林筱芬阅读 139评论 0 1
  • 雪茄的分类 1、雪茄按形状分类常见的有: t型、桶型、绅士型(大众化形状,直径13毫米,长度117毫米);还有一些...
    雪茄小生阅读 1,271评论 0 1