题目:
一些项目要占用一个会议室宣讲, 会议室不能同时容纳两个项目的宣讲。
给你每一个项目开始的时间和结束的时间(给你一个数组, 里面是一个个具体的项目),
你来安排宣讲的日程, 要求会议室进行的宣讲的场次最多。
返回这个最多的宣讲场次。
分析:
很明显采用贪心策略最好解决,但是以什么关键点来贪心呢?
如果以开始时间早
来贪心
反例:
如果以持续时间短
来贪心
反例:
最佳的策略是:用最早结束时间做贪心。
package com.gxu.dawnlab_algorithm7;
import java.util.Arrays;
import java.util.Comparator;
/**
* 活动安排问题
* @author junbin
*
* 2019年7月11日
*/
public class BestArrange {
public static class Program {
public int start;
public int end;
public Program(int start, int end) {
this.start = start;
this.end = end;
}
}
public static class ProgramComparator implements Comparator<Program> {
@Override
public int compare(Program o1, Program o2) {
return o1.end - o2.end;
}
}
public static int bestArrange(Program[] programs, int start) {
Arrays.sort(programs, new ProgramComparator());
int result = 0;
for (int i = 0; i < programs.length; i++) {
if (start <= programs[i].start) {
result++;
start = programs[i].end;
}
}
return result;
}
public static void main(String[] args) {
}
}