package com.zhang.reflection.面试.算法模版.贪心算法;
import java.util.Arrays;
import java.util.Comparator;
/**
* 一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。
* 给你每一个项目开始的时间和结束的时间
* 你来安排宣讲的日程,要求会议室进行的宣讲的场次最多。
* 返回最多的宣讲场次
* 按照结束的时间贪心
*/
public class 教室使用 {
//方案2:贪心解法
public static int bestArrange2(Program[] programs) {
//根据结束时间排序,谁结束早,谁排在前面
Arrays.sort(programs, new ProgramComparator());
int timeLine = 0;
int result = 0;
for (int i = 0; i < programs.length; i++) {
if (timeLine <= programs[i].start) {
result++;
timeLine = programs[i].end;
}
}
return result;
}
//定义一个比较器,根据结束时间排序,谁结束早,谁排在前面
public static class ProgramComparator implements Comparator<Program> {
@Override
public int compare(Program o1, Program o2) {
return o1.end - o2.end;
}
}
}
class Program {
//会议开始时间
public int start;
//会议结束时间
public int end;
public Program(int start, int end) {
this.start = start;
this.end = end;
}
}