题目描述
一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲,给你每一个项目开始的时间和结束的时间 你来安排宣讲的日程,要求会议室进行的宣讲的场次最多,返回最多的宣讲场次
定义描述会议的结构
/**
* 会议 定义开始时间和结束时间.
*/
public static class Meeting{
int start;
int end;
public Meeting(int start, int end) {
this.start = start;
this.end = end;
}
}
解题思路
我们想安排最多的会议,最直观的考虑就是越早结束的会议,我们就提前安排,结束后安排下一个会议,这样就能保证安排最多的会议,下面我们代码实现这一思路.
/**
* 定义比较器,按结束时间进行排序
*/
public static class MyComparator implements Comparator<Meeting>{
@Override
public int compare(Meeting o1, Meeting o2) {
return o1.end - o2.end;
}
}
/**
* 贪心算法 我们以结束时间进行排序,越早结束越先排.
* @param meetings
* @return
*/
public static int bestArrange(Meeting[]meetings){
if (meetings == null || meetings.length == 0){
return 0;
}
Arrays.sort(meetings,new MyComparator());
int result = 0;
int timeLine = 0;
for (int i = 0; i < meetings.length;i++){
if (meetings[i].start >= timeLine){
result++;
timeLine = meetings[i].end;
}
}
return result;
}