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

来源:互联网 发布:手机游戏录像软件 编辑:程序博客网 时间:2024/06/08 02:01

void GetLeastNumbers_Solution1(int* input, int n, int* output, int k){    if(input == NULL || output == NULL || k > n || n <= 0 || k <= 0)        return;    int start = 0;    int end = n - 1;    int index = Partition(input, n, start, end);    while(index != k - 1)    {        if(index > k - 1)        {            end = index - 1;            index = Partition(input, n, start, end);        }        else        {            start = index + 1;            index = Partition(input, n, start, end);        }    }    for(int i = 0; i < k; ++i)        output[i] = input[i];}

typedef multiset<int, greater<int> >            intSet;typedef multiset<int, greater<int> >::iterator  setIterator;void GetLeastNumbers_Solution2(const vector<int>& data, intSet& leastNumbers, int k){    leastNumbers.clear();    if(k < 1 || data.size() < k)        return;    vector<int>::const_iterator iter = data.begin();    for(; iter != data.end(); ++ iter)    {        if((leastNumbers.size()) < k)            leastNumbers.insert(*iter);        else        {            setIterator iterGreatest = leastNumbers.begin();            if(*iter < *(leastNumbers.begin()))            {                leastNumbers.erase(iterGreatest);                leastNumbers.insert(*iter);            }        }    }}


0 0