题目描述:
已经知道了所有你喜欢的电视节目的转播时间表,如何合理安排看尽量多的完整节目?
输入:
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的电视节目的总数,然后是n行数据,每行包括两个数据,分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数来表示。n=0表示输入结束,不做处理。
输出:
对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。
样例输入:
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
0
样例输出:
5
示例代码:
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while (scanner.hasNextLine()){ int number = scanner.nextInt(); if (number==0){break;} TVprogram[] tVprograms = new TVprogram[number]; for (int i=0;i<number;i++){ int start_time = scanner.nextInt(); int end_time = scanner.nextInt(); tVprograms[i]=new TVprogram(start_time,end_time); } Arrays.sort(tVprograms,0,number,new cmp()); int start_time_left = 0; int end_time_left = 20;//如果给出收看电视节目的时间段范围,则此句有用 int cnt=0; for (int i=0;i<number;i++){ int stime = tVprograms[i].start_time; int etime = tVprograms[i].end_time; if (stime>=start_time_left){ if (etime<=end_time_left){start_time_left = etime;cnt++;}//同理此处判断条件也是当有时间段范围限制时,需要判断 else {break;}} else {continue;} } System.out.println(cnt); } } }
public class TVprogram { int start_time; int end_time; public TVprogram(int start_time,int end_time){ this.start_time=start_time; this.end_time=end_time; } }
import java.util.Comparator; public class cmp implements Comparator<TVprogram> { @Override public int compare(TVprogram o1, TVprogram o2) { if (o1.end_time<o2.end_time){return -1;} else {return 1;} } }