【华为笔试题】HJ3 明明的随机数

330 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

声明:版权归本人所有,违者必究。 
转载请注明来源 https://juejin.cn/post/7112658873902694413

描述

明明生成了NN个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。

数据范围:  1≤n≤1000  ,输入的数字大小满足 1≤val≤500 

输入描述:

第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。 具体格式可以参考下面的"示例"。

输出描述:

输出多行,表示输入数据处理后的结果

代码:


import java.util.Scanner;
import java.util.TreeSet;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        TreeSet<Integer> set = new TreeSet<>();
        for (int i = 0; i < n; i++) {
            int randomInt = scanner.nextInt(500);
            set.add(randomInt);
        }
        set.forEach(s-> System.out.println(s));
    }
}

个人总结:

1、这个题目出的不好,输入只需要一个参数即可,通过程序自动生成随机数,而不是一个个的去让用户输入。 2、TreeSet特性:有序性、唯一性 3、如果此题目改为将数值从大到小排序,则代码需要修改为,即创建TreeSet时传入比较器:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    TreeSet<Integer> set = new TreeSet<>((s1,s2)->s2-s1);
    for (int i = 0; i < n; i++) {
        int randomInt = scanner.nextInt();
        set.add(randomInt);
    }
    set.forEach(s-> System.out.println(s));
}