53. 最小的k個數(shù)

題目地址: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; }; //類或者匿名函數(shù)
        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;
    }
};

總結(jié)

復(fù)習(xí)堆

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最全的iOS面試題及答案 iOS面試小貼士 ———————————————回答好下面的足夠了-----------...
    zweic閱讀 2,803評論 0 73
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,599評論 0 6
  • 午時三刻,武場央及,群雄并起,所過劫掠,操之過急;林酣微坐,尚恬而憩,天色滄惘,小雨淅瀝;高臺正襟,指尖談笑。所過...
    非涯閱讀 598評論 0 0
  • 我是日記星球第176號星寶寶,我正在參加日記星球第十三期蛻變之旅,這是我的第77篇日記。如果你想在2018年獲得更...
    林筱芬閱讀 161評論 0 1
  • 雪茄的分類 1、雪茄按形狀分類常見的有: t型、桶型、紳士型(大眾化形狀,直徑13毫米,長度117毫米);還有一些...
    雪茄小生閱讀 1,376評論 0 1

友情鏈接更多精彩內(nèi)容