zoukankan      html  css  js  c++  java
  • 华为机试:明明的随机数

    题目描述

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

    Input Param 

         n               输入随机数的个数     

     inputArray      n个随机整数组成的数组 

         

    Return Value

         OutputArray    输出处理后的随机整数


    注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。


     

    输入描述:

    输入多行,先输入随机整数的个数,再输入相应个数的整数

    输出描述:

    返回多行,处理后的结果

    示例1

    输入

    11
    10
    20
    40
    32
    67
    40
    20
    89
    300
    400
    15
    

    输出

    10
    15
    20
    32
    40
    67
    89
    300
    400

    Java: 输入的时候去重,关键在于多个case的处理,需要判定hasNext
     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 public class Main {
     5 
     6     public static void main(String[] args) {
     7         Scanner sc=new Scanner(System.in);
     8         while(sc.hasNext()){
     9             int n = sc.nextInt();
    10             int[] m = new int[n];
    11             int[] state = new int[1000];
    12             int count=0;
    13             //输入加去重
    14             for    (int i = 0; i < n; i++){
    15                 m[i] = sc.nextInt();
    16                 state[m[i]-1]+=1;
    17                 if(state[m[i]-1]==2){
    18                     state[m[i]-1]-=1;
    19                     m[i]=0;
    20                     i--;
    21                     n--;
    22                     count++;
    23                 }
    24             }
    25             //排序
    26             Arrays.sort(m);
    27             //输出只输出重复个数的后面数字,因为前面的都是0
    28             for(int i = count; i<m.length; i++){
    29                 System.out.println(m[i]);
    30             }
    31         }
    32         sc.close();
    33     }
    34 
    35 }

    上述代码可以简化为:时间由107ms改进到89ms,但是空间占用由10732K增加到10764K

     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 public class Main {
     5 
     6     public static void main(String[] args) {
     7         Scanner sc=new Scanner(System.in);
     8         while(sc.hasNext()){
     9             int n = sc.nextInt();
    10             int temp_num = 0;
    11             int[] state = new int[1000];
    12             //对输入进行记录,相当于去重加排序
    13             for    (int i = 0; i < n; i++){
    14                 temp_num = sc.nextInt();
    15                 state[temp_num-1]+=1;
    16             }
    17             //输出只输出非0的下标+1
    18             for(int i = 0; i<state.length; i++){
    19                 if(state[i]!=0){
    20                     System.out.println(i+1);
    21                 }
    22             }
    23         }
    24         sc.close();
    25     }
    26 
    27 }

    C++:C++就是快,占用空间小,时间2ms,空间372K。其中inttemp_num=0;放在while中的时候时间增加为3ms,空间占用496K

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int n;
     7     int temp_num = 0;
     8     while (cin>>n)
     9     {
    10         int m[1000] = { 0 };
    11         for (int i = 0; i < n; i++)
    12         {
    13             cin >> temp_num;
    14             m[temp_num - 1] += 1;
    15         }
    16         for (int i = 0; i < 1000; i++)
    17         {
    18             if (m[i]!=0)
    19             {
    20                 cout << (i + 1) << endl;
    21             }
    22         }
    23     }
    24 
    25     return 0;
    26 }
  • 相关阅读:
    CentOS7 安装MongoDB 3.0服务
    PXE批量部署linux操作系统
    centos的软件安装方法rpm和yum
    第二章:Posix IPC
    第一章:简介
    Unix网络编程--卷二:进程间通信
    Unix网络编程--卷二:FAQ
    linux下samba环境搭建
    Linux下缓冲区溢出攻击的原理及对策(转载)
    lsof
  • 原文地址:https://www.cnblogs.com/zdtiio/p/7569744.html
Copyright © 2011-2022 走看看