题目:
一些项目要占用一个会议室宣讲, 会议室不能同时容纳两个项目的宣讲。 给你每一个项目开始的时间和结束的时间(给你一个数组, 里面 是一个个具体的项目), 你来安排宣讲的日程, 要求会议室进行 的宣讲的场次最多。 返回这个最多的宣讲场次。
解题思路:
如果想要宣讲最多次数,可以按照会议的结束时间作为优先比较的项.结束时间靠前的先宣讲,宣讲完毕后,去掉开始时间大于上一次会议结束时间的宣讲,再次选择一个最先结束的.以此类推.
import java.text.ParseException;
import java.util.Comparator;
import java.util.Date;
import java.util.PriorityQueue;
public class ScheduleMeeting {
public static Integer schedule(Meeting [] meetings) throws ParseException{
PriorityQueue<Meeting> pQ = new PriorityQueue<Meeting>( new ScheduleMeeting().new MyMeetingComparator());
for(int i = 0; i < meetings.length; i++){
pQ.add(meetings[i]);
}
int times = 0;
Date endTime = null;
if(!pQ.isEmpty()){
endTime = pQ.poll().endTime;
times++;
}
while(!pQ.isEmpty()){
Meeting cur = pQ.poll();
Date startTime = cur.startTime;
if(startTime.compareTo(endTime) > 0){
times ++;
endTime = cur.endTime;
}
}
return times;
}
class Meeting{
Date startTime;
Date endTime;
Meeting(Date startTime,Date endTime){
this.startTime = startTime;
this.endTime = endTime;
}
}
class MyMeetingComparator implements Comparator<Meeting>{
@Override
public int compare(Meeting o1, Meeting o2) {
return o2.endTime.compareTo(o1.endTime);
}
}
}