安排会议(区间问题、贪心)
关于区间问题还有我的另一篇博客https://blog.csdn.net/qq_34115899/article/details/79388870
题目: 一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。给你每一个项目开始的时间和结束的时间(给你一个数组,里面是一个个具体的项目),你来安排宣讲的日程,要求会议室进行 的宣讲的场次最多。输出这个最多的宣讲场次。
区间问题都是选用早结束为策略的,谁结束早就先做哪个宣讲。有人可能会想以先开始为贪心策略, 或者选用时间短的
输入
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)); } }========================================Talk is cheap, show me the code=======================================
CSDN博客地址:https://blog.csdn.net/qq_34115899