题目: 一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。给你每一个项目开始的时间和结束的时间(给你一个数组,里面是一个个具体的项目),你来安排宣讲的日程,要求会议室进行 的宣讲的场次最多。输出这个最多的宣讲场次。
区间问题都是选用早结束为策略的,谁结束早就先做哪个宣讲。有人可能会想以先开始为贪心策略, 或者选用时间短的
输入
5 1 3 2 5 4 7 6 9 8 10
输出
3
import java.io.BufferedInputStream;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class test {
public static class Program {
int start, end;
public Program(int start, int end) {
this.start = start;
this.end = end;
}
}
public static int bestArrange(Program[] p) {
int ans = 0;
Arrays.sort(p, new Comparator<Program>() { // 哪场会议结束时间早就排在前面
public int compare(Program o1, Program o2) {
return o1.end - o2.end;
}
});
int start = 0;
for (int i = 0; i < p.length; ++i) {
if (start <= p[i].start) { // 端点不重合可以去掉等号
start = p[i].end; // 记录下一场能开始的时间
++ans;
}
}
return ans;
}
public static void main(String[] args) {
Scanner cin = new Scanner(new BufferedInputStream(System.in));
int n = cin.nextInt();
Program[] p = new Program[n];
for (int i = 0; i < n; ++i) {
int start = cin.nextInt();
int end = cin.nextInt();
p[i] = new Program(start, end);
}
cin.close();
System.out.println(bestArrange(p));
}
}