Leetcode每日一题:会议室 III - 解决方案与代码解析
Leetcode每日一题 —— 会议室 III
这是一个关于会议室安排的问题。每个会议的开始和结束时间已经确定,我们需要根据给定的规则来安排会议,并找出被使用次数最多的会议室。
思路
按照题目思路,每个会议在哪里举办,什么时候开始已经是确定了的,所以只要按照题目给的规则排列后统计即可。本来是想用TreeSet或者PriorityQueue来获取当前可用的会议室,但是每次都需要提出所有当前可用的会议室才能知道应该用哪个(因为如果都可用的话要取编号最小的那个,而排序是需要先按照会议室可用开始时间优先的)。再看看会议室的范围 1 <= n <= 100,所以不如每次遍历会议室,如果可用就直接用,不可用再选最先结束会议的。
所以最终思路就是,先将会议按开始时间排序,遍历会议,每个会议遍历会议室,找到可用的会议室并计数,最后统计使用最多的会议室。
代码
public int mostBooked(int n, int meetings) {
long room = new long[n];
int useCnt = new int[n];
Arrays.sort(meetings, Comparator.comparingInt(a -> a[0]));
for (int meeting : meetings) {
int start = meeting[0];
int end = meeting[1];
int earRoom = -1;
long earRoomTime = Long.MAX_VALUE;
for (int i = 0; i < n; i++) {
if (room[i] <= start) {
earRoom = i;
earRoomTime = start;
break;
} else {
if (room[i] < earRoomTime) {
earRoom = i;
earRoomTime = room[i];
}
}
}
room[earRoom] = earRoomTime + end - start;
useCnt[earRoom]++;
}
int ans = 0, max = 0;
for (int i = 0; i < n; i++) {
if (useCnt[i] > max) {
max = useCnt[i];
ans = i;
}
}
return ans;
}这个代码首先对会议按照开始时间进行排序,然后遍历每个会议,寻找可用的会议室。如果找到可用的会议室,则更新该会议室的结束时间和使用次数。最后,统计使用次数最多的会议室,并返回其编号。
评论已关闭