《剑指offer》面试题30——最小的k 个数

《剑指offer》面试题30——最小的k 个数
#1.题目描述:
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

#2.解题思路:
1。全排序。时间复杂度O(nlogn)。
2。Partiton思想 ——用快速排序,时间复杂度O(n) 。
3。最大堆 时间复杂度O(nlogk)
4。红黑树:multiset集合。

#3.代码实现:

###3.1.方法1代码

#include
#include
#include 

using namespace std;

    vector GetLeastNumbers_Solution(vector input, int k)
    {
            vector res;
            res.clear();
            if(input.empty()||k>input.size())
                return res;
            sort( input.begin(), input.end());
            for(int i=0; i myarray)
{
    if(myarray.size()==0)
        cout<<"vector为空"<vec={1,5,1,1,1,7,1,8};
    Print1Dvec(vec);
    vectorvec2=GetLeastNumbers_Solution(vec  ,4);
    Print1Dvec(vec2);

       return 0;
}

运行结果:

1  5  1  1  1  7  1  8
1  1  1  1

Process returned 0 (0x0)   execution time : 0.429 s
Press any key to continue

方案4代码:


//multiset
//当容器中的元素数量不够k 个时,直接放入容器中
//当容器中的元素数量满k个时,,把当前数组中的元素与容器中的最大的元素比较。
//如果当前元素值小于容器中的最大值,则将容器中的最大值替换为当前值。

#include
#include 
#include

using namespace std;

//typedef multiset>  intSet;
//typedef multiset>::iterator setiter;


    vector GetLeastNumbers_Solution(vector input, int k)
    {
        multiset>  LeastNumber ;
        if(input.size()<=0||k>input.size())
            return vector ();

        //仿函数中的greater模板,从大到小排序
        vector::iterator itervec=input.begin();
        for(; itervec!=input.end();  itervec++ )
        {
            if(LeastNumber.size()>::iterator  Itergreast=LeastNumber.begin();
                if(*itervec<*Itergreast)
                {
                    LeastNumber.erase( Itergreast);   //删除迭代器指针指向的元素
                    LeastNumber.insert(*itervec);   //插入元素值
                }
            }
        }
            return vector(LeastNumber.begin(),LeastNumber.end());

    }

void Print1Dvec(vector myarray)
{
    if(myarray.size()==0)
        cout<<"vector为空"<vec={1,5,1,1,1,7,1,8};
    Print1Dvec(vec);
    vectorvec2=GetLeastNumbers_Solution(vec  ,4);
    Print1Dvec(vec2);

       return 0;
}

运行结果:

1  5  1  1  1  7  1  8
1  1  1  1 

Process returned 0 (0x0)   execution time : 0.446 s
Press any key to continue.

你可能感兴趣的:(《剑指offer》)