剑指Offer(牛客版)--面试题40: 最小的K个数

题目描述:

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

分析:

 完整代码:

class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        //声明一个容器,用来存放最小k个数字
        vector<int> array;
        //清空 array
        array.clear();
        //检查输入的合法性
        if(input.size() < k || k < 1)
            return array;
        //声明一个迭代器,智能读取容器中的元素,不能修改
        vector<int>::const_iterator iter  = input.begin();
        //使用 intset 声明一个容器
        intset result;
        //遍历整个容器
        for(; iter != input.end(); ++iter)
        {
            //如果 array 容器没有装满 
            if((result.size()) < k)
                result.insert(*iter);
            //如果容器已经装满
            else
            {
                //声明一个迭代器
                setIterator it = result.begin();
                //判断当前的元素是否大于array中的第一个元素
                if(*iter < *(result.begin()))
                {
                    //删去array的第一个元素
                    result.erase(*it);
                    //将当前的元素插入到 array 中
                    result.insert(*iter);
                }
            }
        }
        //重新排序
        for(setIterator point = result.begin(); point != result.end(); ++point)
        {
            array.push_back(*point);
        }
        //返回最终的结果
        return array;
    }
private:
    typedef multiset<int, greater<int> > intset;
    typedef multiset<int, greater<int> >:: iterator setIterator;
};

猜你喜欢

转载自blog.csdn.net/weixin_41923658/article/details/93783526
今日推荐