华为OJ平台——输出最小的k个数

时间:2022-07-18 22:47:44

输入n个整数,输出其中最小的k个。

详细描述:

接口说明

原型:

bool GetMinK(unsignedint uiInputNum, int *pInputArray, unsignedint uiK, int * pOutputArray);

输入参数:

unsignedint uiInputNum //输入整数个数

int * pInputArray  //输入整数数组

unsignedint uiK   //需输出uiK个整数

输出参数(指针指向的内存区域保证有效):

int * pOutputArray //最小的uiK个整数

练习阶段:  初级

运行时间限制: 10Sec

内存限制: 128MByte

输入:

输入说明

1 输入两个整数

2 输入一个整数数组

输出:

输出一个整数数组

样例输入: 5 2

1 3 5 7 2

样例输出: 1 2

分值:100分

代码如下:

 import java.util.Scanner;

 /**
* 输入n个整数,输出k个最小的
* @author keli
*
*/
public class GetKSmaller { public static void main(String[] args) {
//输入
Scanner cin = new Scanner(System.in) ;
int n = cin.nextInt() ;
int k = cin.nextInt() ;
int [] arr = new int[n] ;
for(int i = 0 ; i < n ; i++){
arr[i] = cin.nextInt() ;
}
cin.close();
//简单的错误判断
if(k > n){
System.out.println("error");
}
//获取结果
int [] res = new int[k] ;
getMinK(n,arr,k,res) ;
//输出
for(int i = 0 ; i < k-1 ; i++){
System.out.print(res[i]+" ") ;
}
System.out.println(res[k-1]);
} /**
* 找出最小的K个数,并按大小存储到res数组中
* @param n
* @param arr
* @param k
* @param res
*/
private static void getMinK(int n, int[] arr, int k, int [] res) {
//为了不改变原先的数据,所以将源数据复制过来
int [] newArr = new int[n] ;
for(int i = 0 ; i < n ; i ++){
newArr[i] = arr[i] ;
} //简单排序算法,对数据进行排序
int temp ;
int index ;
for(int i = 0 ; i < k ; i ++){
temp = newArr[i] ;
index = i ;
for(int j = i+1 ; j < n ; j++){
if(temp > newArr[j]){
temp = newArr[j] ;
index = j ;
}
}
if(index != i){
newArr[index] = newArr[i] ;
newArr[i] = temp ;
}
//将相应的数据存放到res数组中
res[i] = newArr[i] ;
}
} }

Code

其中非常值得注意的是华为的OJ平台的输出要求非常变态和死板,这种类型的输出只能是一个数后加一个空格(不能用Tab),然后最后一个数之后不能空格