Leetcode [k]は40の最小数(タイトル日)に内接します

トピックリンク:最小数k


質問の意味:整数の入力配列を arr 、中で最小見つける k 番号を。例えば、デジタル入力4,5,1,6,2,7,3,8 8、最小数は4 1,2,3,4です。


ソリューション:フィーリングを2回行う必要があります。最も単純なアイデアは、ソート順です。

しかし、ヒープを加えるの練習ではなく、プライオリティキューで、ヒープを手書き。

しかし、私は遅くソートよりも実行されているヒープ..


コード:

クラス解決{
 パブリック
    ベクトル < INT > getLeastNumbers(ベクトル< INT >&ARR、int型K){ 
        ベクトル < INT > ANS。
        もし(K == 0戻りANS。
        ソート(arr.begin()、arr.end()); 

        
        以下のためにINT iが= 0 ; I <K; I ++ ){ 
            ans.push_back(ARR [I])。
        } 

        戻りANS。
    } 
}。


OR 


クラスのソリューション{
 公共の
    ベクトル< INT > getLeastNumbers(ベクトル< INT >&ARR、int型K){ 
        ベクトル < INT > ANS。
        もし(K == 0戻りANS。

        PRIORITY_QUEUE < int型、ベクトル< int型 >、あまり< int型 >> Q; 
        
        以下のためにINT iが= 0 ; iが<()arr.size; I ++ ){ 
            q.push(ARR [I])。
            もし(q.size()> K)q.pop(); 
        } 
        のためのINT I = 0、I <K; I ++ ){ 
            ans.push_back(q.top())。
            q.pop(); 
        } 

        戻りANS。
    } 
}。

 

おすすめ

転載: www.cnblogs.com/Asumi/p/12535804.html