• 华为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),然后最后一个数之后不能空格

  • 相关阅读:
    Linux内存管理 -- /proc/{pid}/smaps讲解
    link hub(other)
    牛客项目平台管家 | xie_note 学习笔记整理📚 项目来源:https://github.com/Making-It/note ,已获得授权转载
    【Linux】C++后台开发面试
    C++ 后台开发面试时一般考察什么?
    Linux C/C++ 学习路线(已拿腾讯、百度 offer)2
    C++路线图
    【转】C++后台开发校招面试常见问题
    【转】Linux C/C++ 学习路线(已拿腾讯、百度 offer)
    学习经验总结|C++后台开发/云计算方向,offer收割机的学习路线
  • 原文地址:https://www.cnblogs.com/mukekeheart/p/5591167.html
Copyright © 2020-2023  润新知