import java.util.Arrays; import java.util.Comparator; public class test29 { //一些项目用一个会议室宣讲,会议室不能同时容纳两个项目宣讲,给每一个项目开始的时间和结束的时间,给出安排的日程。 //要求会议室进行的宣讲的场次最多,返回最多的宣讲场次 public static class Program{ public int start; public int end; public Program(int start ,int end){ this.start = start; this.end =end; } } //法1:暴力枚举 public static int bestArrange1(Program[] programs){ if(programs == null || programs.length == 0){ return 0; } return process(programs ,0, 0); } //还剩的会议放在programs里 //done/是之前已经安排的会议数 //timeLine为目前已经来到的时间点 //目前的时间点已经安排了多少会议,又知道剩下的会议,返回剩下的最多会议数 public static int process(Program[] programs , int done , int timeLine){ if(programs.length == 0){ return done; } int max = done; for (int i = 0; i < programs.length; i++) { if(programs[i].start >= timeLine){ //如果当前会议开始时间比当前时间晚,就说明时间够,那么重新弄一个不包括此会议的数组,递归来计算当前剩余会议可开的最大场次 Program[] next = copyButExcept(programs ,i); max = Math.max(max , process(next , done+1 , programs[i].end)); } } return max; } copyButExcept方法,复制Program数组,排除指定索引的元素 public static Program[] copyButExcept(Program[] programs ,int i){ Program[] ans = new Program[programs.length -1]; int index = 0; for (int k = 0; k < programs.length; k++) { if(k != i) { ans[index++] =programs[k]; } } return ans; } //法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>{ public int compare(Program o1 ,Program o2){ return o1.end - o2.end; } } }
08-18
5499
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
04-20
873
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
11-13
155
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-06
453
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
11-15
142
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)