會議宣講調度問題

題目:

一些項目要佔用一個會議室宣講, 會議室不能同時容納兩個項目的宣講。 給你每一個項目開始的時間和結束的時間(給你一個數組, 裏面 是一個個具體的項目), 你來安排宣講的日程, 要求會議室進行 的宣講的場次最多。 返回這個最多的宣講場次。
 

解題思路:

如果想要宣講最多次數,可以按照會議的結束時間作爲優先比較的項.結束時間靠前的先宣講,宣講完畢後,去掉開始時間大於上一次會議結束時間的宣講,再次選擇一個最先結束的.以此類推.

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);
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章