您的位置:首页 > 其它

安排会议(区间问题、贪心)

2018-03-28 17:49 381 查看
      关于区间问题还有我的另一篇博客https://blog.csdn.net/qq_34115899/article/details/79388870
题目: 一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。给你每一个项目开始的时间和结束的时间(给你一个数组,里面是一个个具体的项目),你来安排宣讲的日程,要求会议室进行 的宣讲的场次最多。输出这个最多的宣讲场次。
区间问题都是选用早结束为策略的,谁结束早就先做哪个宣讲。有人可能会想以先开始为贪心策略, 或者选用时间短的


输入
5
1   3
2   5
4   7
6   9
8   10

输出
3import 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
;
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));
}
}=============================我是一个反应迟钝的程序员====================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: