题目:
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。
代码:
import java.util.*;
public class Main{
public static void single_sort(int[] num){
Set<Integer> numSet = new TreeSet<Integer>();
for(int i=0; i<num.length; i++) {
numSet.add(num[i]);
}
Iterator<Integer> iter = numSet.iterator();
while(iter.hasNext()) {
Integer data = iter.next();
System.out.println(data);
}
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()) {//这里加循环是因为一个测试用例中有多组数据(题目最后一行有描述)
int count = in.nextInt();
int[] num = new int[count];
for(int i=0; i<count; i++){
num[i] = in.nextInt();
}
single_sort(num);
}
}
}
这个例子对我这个新手有点难度,尤其是还不太了解这种题目的测试用例,导致总是无法通过牛客网的调试。之后百度发现了下面这篇文章找到了解决办法。
参考文章:https://blog.csdn.net/JayBillions/article/details/80739915
上述文章中的作者和我一个思路:都是使用了集合中的TreeSet,TreeSet底层使用的是红黑树(虽然我还没学…),TreeSet的特殊之处在于不允许重复并且有序,也就说TreeSet本身就是一个去重和排序的利器。
当然,排序和去重也是最基本的算法,我还是初学者,所以最好还是用C/C++自己学会基本的排序和去重算法。
只要每天积累,一定会有收获!