TreeSet去重排序(华为研发工程师编程题)

题目:

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

为方便看出效果(多出一些重复的随机数),将随机数范围改小,个数增多

package com.test;

import java.util.Scanner;
import java.util.TreeSet;

public class MyTest {
    public static void main(String[] args) {
        int m = 10;//随机数产生的范围
        System.out.println("请输入正整数N");
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        //存放去重排序后的数据
        TreeSet<Integer> set = new TreeSet<Integer>();
        //存放去重排序前的数据
        Integer[] array = new Integer[n];
        if (1 <= n) {
            for (int i = 0; i < n; i++) {
                //产生随机数
                int v = (int) (1 + Math.random() * m);
                array[i] = v;
                set.add(v);
            }
        }

        System.out.println("----原始数据----");
        for (int i : array) {
            System.out.print(i + "、");
        }
        System.out.println("共计" + array.length + "个数字");

        System.out.println("----去重排序结果----");
        for (Integer i : set) {
            System.out.print(i + "、");
        }
        System.out.println("共计" + set.size() + "个数字");
    }

}

结果:

请输入正整数N
12
----原始数据----
5、9、6、3、1、4、7、9、5、5、6、4、共计12个数字
----去重排序结果----
1、3、4、5、6、7、9、共计7个数字

TreeSet排序:

一、数据大小排序
TreeSet<Integer> set = new TreeSet<Integer>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                //从大到小:
                return o2-o1;
                //从小到大:
                //return o1-o2;
            }
        });

二、数据存放顺序
TreeSet<Integer> set = new TreeSet<Integer>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                //顺序
                return 1;
                //倒序
                //return -1;
                //只显示第一个
                //return 0;
            }
        });

结果:
①return 1
        请输入正整数N
        10
        ----原始数据----
        1010210134229、共计10个数字
        ----结果----
        1010210134229、共计10个数字

②return -1
        请输入正整数N
        10
        ----原始数据----
        108981751075、共计10个数字
        ----结果----
        571057189810、共计10个数字

③return 0(把后面的数字都当成重复的了,差值为0)
        请输入正整数N
        10
        ----原始数据----
        8214756921、共计10个数字
        ----结果----
        8、共计1个数字

原题链接:
https://www.nowcoder.com/question/next?pid=1088888&qid=36846&tid=6451656

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值