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

输入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分

代码如下:

 1 import java.util.Scanner;
 2 
 3 /**
 4  * 输入n个整数,输出k个最小的
 5  * @author keli
 6  *
 7  */
 8 public class GetKSmaller {
 9 
10     public static void main(String[] args) {
11         //输入
12         Scanner cin = new Scanner(System.in) ;        
13         int n = cin.nextInt() ;
14         int k = cin.nextInt() ;
15         int [] arr = new int[n] ;
16         for(int i = 0 ; i < n ; i++){
17             arr[i] = cin.nextInt() ;
18         }
19         cin.close();
20         //简单的错误判断
21         if(k > n){
22             System.out.println("error");
23         }
24         //获取结果
25         int [] res = new int[k] ;
26         getMinK(n,arr,k,res) ;
27         //输出
28         for(int i = 0 ; i < k-1 ; i++){
29             System.out.print(res[i]+" ") ;
30         }
31         System.out.println(res[k-1]);        
32     }
33 
34     /**
35      * 找出最小的K个数,并按大小存储到res数组中
36      * @param n
37      * @param arr
38      * @param k
39      * @param res
40      */
41     private static void getMinK(int n, int[] arr, int k, int [] res) {
42         //为了不改变原先的数据,所以将源数据复制过来
43         int [] newArr = new int[n] ;
44         for(int i = 0 ; i < n ; i ++){
45             newArr[i] = arr[i] ;
46         }
47         
48         //简单排序算法,对数据进行排序
49         int temp ;
50         int index ;
51         for(int i = 0 ; i < k ; i ++){
52             temp = newArr[i] ;
53             index = i ;
54             for(int j = i+1 ; j < n ; j++){
55                 if(temp > newArr[j]){
56                     temp = newArr[j] ;
57                     index = j ;
58                 }
59             }
60             if(index != i){
61                 newArr[index] = newArr[i] ;
62                 newArr[i] = temp ;
63             }    
64             //将相应的数据存放到res数组中
65             res[i] = newArr[i] ;
66         }        
67     }
68 
69 }

Code

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

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注