会议宣讲调度问题

题目:

一些项目要占用一个会议室宣讲, 会议室不能同时容纳两个项目的宣讲。 给你每一个项目开始的时间和结束的时间(给你一个数组, 里面 是一个个具体的项目), 你来安排宣讲的日程, 要求会议室进行 的宣讲的场次最多。 返回这个最多的宣讲场次。
 

解题思路:

如果想要宣讲最多次数,可以按照会议的结束时间作为优先比较的项.结束时间靠前的先宣讲,宣讲完毕后,去掉开始时间大于上一次会议结束时间的宣讲,再次选择一个最先结束的.以此类推.

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

猜你喜欢

转载自blog.csdn.net/weixin_39445556/article/details/105138114