码迷,mamicode.com
首页 > 其他好文 > 详细

item30,最小的k个数

时间:2016-06-23 22:09:27      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

剑指offer给出两类方法:

1,借助快排的思想,需要修改输入数组的元素,时间复杂度O(n)

2,借助STL中set或者multiset,因为它们的底层数据结构是红黑树实现的,插入数据时间复杂度为O(logk),所以总的时间复杂度为O(nlogn);

==========

方法2的代码如下:

typedef std::multiset<int,greater<int> > intset;
    typedef std::multiset<int,greater<int> >::iterator iteratorset;

    void getLeastNumber(vector<int> nums,intset& leastNumber,int k){
        int length = nums.size();

        leastNumber.clear();
        if(length <k) return;
        for(auto i:nums){
            if(leastNumber.size()<(unsigned int)k){
                leastNumber.insert(i);
            }else{
                iteratorset itset = leastNumber.begin();
                if(i<*itset){
                    leastNumber.insert(i);
                    leastNumber.erase(leastNumber.begin());
                }
            }///if-else
        }///for
    }///end-function

 

item30,最小的k个数

标签:

原文地址:http://www.cnblogs.com/li-daphne/p/5612306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!