比赛班级

题目描述

现学校有一场体育比赛每个班级需要派出两名同学参加,我们知道每个同学都有对应的学号,例如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),把等于一的输出就行,但是我想不出来了,我只能这么写了。空间复杂度三层嵌套了,有两个多余数组来存放去掉后两位数字后的数值和出现次数,然后进行对比,空间复杂度也大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值