一、问题
假期快结束了,你还有很多电影想看。你计划在一天内尽量多的看到完整的多部电影。 现在把你喜欢的电影的播放时间表列出来,希望你能进行合理的安排。
二、要求
输入格式:
输入包含多组测试数据。每组输入的第一行是一个整数n(0<=n<=100),表示喜欢的电影的总数。 接下来n行,每行输入两个整数st和et(1<=i<=n),表示第i个电影的开始和结束时间,为了简化问题,每个时间都用一个正整数表示,起时间取值范围为[0,24]。
输出格式:
对于每组输入,输出能完整看到的电影的个数。
输入样例:
在这里给出一组输入。例如:
12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
输出样例:
在这里给出相应的输出。例如:
5
三、代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
public class Main{
static class Node{
int begin;
int end;
public Node(int begin,int end){
this.begin=begin;
this.end=end;
this.end=end;
}
}
//重写比较 使得node 按照end时间从小到大排
public static void compare(ArrayList<Node> list){
Collections.sort(list,new Comparator(){
@Override
public int compare(Object o1, Object o2) {
Node node1=(Node)o1;
Node node2=(Node)o2;
if(node1.end>node2.end){
return 1;
}else if(node1.end==node2.end){
return 0;
}else{
return -1;
}
}
});
}
public static void main(String[] args) {
int first=0,last=0,sum=0;
ArrayList<Node> list =new ArrayList<>();
Scanner scanner=new Scanner(System.in);
int n= Integer.valueOf(scanner.nextLine());
for (int i = 0; i < n; i++) {
String str=scanner.nextLine();
String[] ss=str.split(" ");
Node node=new Node(Integer.valueOf(ss[0]),Integer.valueOf(ss[1]));
list.add(node);
}
compare(list);//对电影按结束时间从小到大排序
for(int i=0;i<n;i++)
{
//从前往后遍历 只要当前的电影开始时间>=上一场的结束时间,个数就加一,然后结束时间改为当前电影的结束时间
if(list.get(i).begin>=last)
{
sum++;
last=list.get(i).end;
}
}
System.out.println(sum);
}
}