华为机试:明明的随机数

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了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 }

 

posted @ 2017-09-21 17:32  zdtiio  阅读(355)  评论(0编辑  收藏  举报