华为OJ试题:输入n个整数,输出其中最小的k个
述 | |
---|---|
知识点 | 循环,数组 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入说明 |
输出 | 输出一个整数数组 |
样例输入 | 5 2 1 3 5 7 2 |
样例输出 | 1 2 |
#include <stdarg.h>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
#include<memory>
#include <string.h>
#include <set>
using namespace std;
bool GetMinK(unsigned int uiInputNum, int *pInputArray, unsigned int uiK, int * pOutputArray)
{
if (pInputArray == NULL || pOutputArray == NULL || uiInputNum < uiK || uiK < 0)
return false;
if (uiK == 0)
return true;
unsigned int i = 0;
vector<int> vec;
for (i = 0; i < uiK; i++)
{
vec.push_back(pInputArray[i]);
}
/* 排序 */
sort(vec.begin(), vec.end());
for (i = uiK; i < uiInputNum; i++)
{
if (vec[uiK - 1] > pInputArray[i])
{
vec[uiK - 1] = pInputArray[i];
sort(vec.begin(), vec.end());
}
}
for(i = 0; i < uiK; i++)
{
pOutputArray[i] = vec[i];
}
return true;
}
int main()
{
int input = 0, output = 0;
int *pdata = NULL;
int *pout = NULL;
int i = 0;
cin >> input >> output;
pout = new int[output];
pdata = new int[input];
for (i = 0; i < input; i++)
{
cin >> pdata[i];
}
GetMinK(input, pdata, output, pout);
for(i = 0; i < output; i++)
{
if(i == 0)
{
cout << pout[i];
}
else
{
cout << " " << pout[i];
}
}
cout << endl;
delete []pdata;
delete []pout;
return 0;
}
还没有评论,来说两句吧...