最小的K个数

来源:互联网 发布:wechat.class.php实例 编辑:程序博客网 时间:2024/05/16 05:13

题目

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

思路

扫描数组,并使用multiset来存储扫描的元素(从大到小存储),如果multiset的长度达到k的话,就用新的元素和multiset的第一个元素比较,如果新元素小,则替换进去,否则丢弃。

参考代码

class Solution{public:    vector<int> GetLeastNumbers_Solution(vector<int> input, int k)    {        int length = input.size();        vector<int> ans;        if (length < k) return ans;        multiset<int, greater<int>> set;        for (int i = 0; i < length; ++i)        {            if (i < k)            {                set.insert(input[i]);            }            else            {                auto it = set.begin();                if (*it > input[i])                {                    set.erase(it);                    set.insert(input[i]);                }            }        }        for (auto it = set.begin(); it != set.end(); ++it)        {            ans.push_back(*it);        }        return ans;    }};
原创粉丝点击