求輸入n個整數中最小的k個數

題目:求輸入n個整數中最小的k個數。

思路:

1、特殊情況判斷,如果輸入數組爲空,或者k大於給定數組長度的,那麼輸出爲空。

2、正常情況下,這道題目應該通過構建最小堆算法來實現的,但由於最小堆本身實現比較複雜,在面試的短短几十分鐘內很難完成,因此我們在徵求面試官的同意後使用stl中的multiset(因爲可能出現重複元素)。multiset是基於紅黑色的,且元素在其中是自動排序的,因而我們可以很方便的實現。

這裏需要說明的是:multiset默認是multiset<int,less<int> > ,即可以理解爲默認爲最小堆,而有些情況下需要設置multiset<int,greater<int> >,這表示其是最大堆,即它的根元素是最大的。

class Solution {

public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        vector<int> res;
        if(input.empty()||k>input.size()){
            return res;
        }
        multiset<int> temp;
        for(int i=0;i<input.size();i++){
            temp.insert(input[i]);
        }
        int m=0;
        for(multiset<int>::iterator start=temp.begin();m<k;start++,m++){
            res.push_back(*start);
        }
        return res;
    }
};
發佈了65 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章