题目:课程冲突
小明是一名学生,又到了学校的选课时间,他想选一些课程学习,已知课程开课时间都在周一到周五之内,早上4节课,晚上2节课。
小明担心选课时间上有所冲突,所以他希望可以对课程时间进行检查。
输入:
首先输入一个整数n(0<n<=100),表示小明选课总数。
之后输入n行选课信息,每行选课信息有2个数字,前一位用0到4表示周一到周五,后一位用0到9表示从早到晚顺序第几讲课,如12表示礼拜2第3讲课。01表示礼拜
1第2讲课。
每行第二个数字表示课程代号,如:204521。课程代码为6位数字。输入课程代码为不重复。
输出:
如果没有冲突课程,输出YES。
如果有冲突课程,也就是同一时间多于一节课,输出所有冲突的课程。输出有多行,如果多个不同的上课时间都有课程冲突,按照周一到周五,早上到晚上时间先后,
按行输出冲突信息。在同一行内,先输出冲突时间,之后输出这一时间的所有课程,输出课程的顺序为输入中这些课程出现的顺序,课程之间以空格分隔,不要在行末输出
多余的空格。
样例输入:
5
01 204521
23 204523
22 204526
01 204528
22 204527
样例输出:
01 204521 204528
22 204526 204527
题目很长,我写的代码可能空间复杂度较高,我没在OJ上跑过,不知道能不能跑过。但是思路没有问题,就当自己练习练习。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class ConflictOfCourse {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
in.nextLine();
String[] str = new String[num];
for(int i=0; i<num; i++){
str[i] = in.nextLine();
}
String[] str1 = new String[num];
String[] str2 = new String[num];
for(int i=0; i<num; i++){
String[] arr = str[i].split(" ");
str1[i] = arr[0];
str2[i] = arr[1];
}
List<List<String>> list = new ArrayList<List<String>>();
for(int i=0; i<num; i++){
if(str1[i] == null)
continue;
List<String> list1 = new ArrayList<String>();
list1.add(str1[i]);
for(int j=i+1; j<num; j++){
if(str1[i].equals(str1[j])){
str1[j] = null;
list1.add(str2[i]);
list1.add(str2[j]);
}
}
list.add(list1);
}
List<List<String>> retlist = new ArrayList<List<String>>();
for(int i=0; i<list.size(); i++){
if(list.get(i).size() >= 3){
retlist.add(list.get(i));
}
}
// 无课程冲突
if(retlist.size() == 0){
System.out.println("YES");
return;
}
// 按时间排序
Collections.sort(retlist, new Comparator<List<String>>(){
@Override
public int compare(List<String> o1, List<String> o2) {
return (o1.get(0)).compareTo(o2.get(0));
}
});
for(int i =0; i<retlist.size(); i++){
for(int j=0; j<retlist.get(i).size()-1; j++){
System.out.print(retlist.get(i).get(j) + " ");
}
System.out.println(retlist.get(i).get(retlist.get(i).size()-1));
}
}
}