华为机试:明明的随机数

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了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 @   zdtiio  阅读(356)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示

目录导航