题目描述
现学校有一场体育比赛每个班级需要派出两名同学参加,我们知道每个同学都有对应的学号,例如201601090120,但现在经老师排查,发现只有一个班级只派出了1名同学,我们知道每个人的学号的百位及以上的位能够具体确定班级即2016010901可确定该班级为2016级计科1班,现在在老师手中有n个学号的名单,你的目的是找出班级只派出一名同学的学号就可以了。
输入
第一行输入一个T,表示有T组测试数据,每组先输入一个n(n<=1000),输入数据保证n为一个奇数,且保证只有一个班级只派出了一名同学,接下来n行,每行输入一个学号,保证学号与题目描述中的学号格式一致,且每位同学的学号都是唯一的。
输出
请你找出这名同学的学号即可。
样例输入
2
3
201701020235
201901010155
201701020234
5
201803050133
201803050175
201401020144
201401020155
201701060241
样例输出
201901010155
201701060241
代码实现
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T;
T = sc.nextInt();
for(int i=0;i<T;i++) {
int n = sc.nextInt();
long a[] = new long[n];
long b[] = new long[n];
int c[] = new int[n];
for(int j=0;j<n;j++) {
a[j] = sc.nextLong();
b[j] = a[j]/100;
c[j] = 0;
}
for(int k=0;k<n;k++) {
for(int m=0;m<n;m++)
if(b[k]==b[m])
c[k] += 1;
}
for(int j=0;j<n;j++)
if(c[j]==1)
System.out.println(a[j]);
}
}
}
我总觉得这么写时间复杂度很大,空间复杂度也很大,这个方法感觉不好。个人觉得可以用填表法(DP),把等于一的输出就行,但是我想不出来了,我只能这么写了。空间复杂度三层嵌套了,有两个多余数组来存放去掉后两位数字后的数值和出现次数,然后进行对比,空间复杂度也大。