トピックリンク:最小数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。 } }。