題目:
一些項目要佔用一個會議室宣講, 會議室不能同時容納兩個項目的宣講。 給你每一個項目開始的時間和結束的時間(給你一個數組, 裏面 是一個個具體的項目), 你來安排宣講的日程, 要求會議室進行 的宣講的場次最多。 返回這個最多的宣講場次。
解題思路:
如果想要宣講最多次數,可以按照會議的結束時間作爲優先比較的項.結束時間靠前的先宣講,宣講完畢後,去掉開始時間大於上一次會議結束時間的宣講,再次選擇一個最先結束的.以此類推.
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);
}
}
}