推 JIWP: 大師 02/18 13:37
https://leetcode.com/problems/meeting-rooms-iii/description
2402. Meeting Rooms III
給你一個數字 n 和一個陣列meetings[],meetings[i] = [starti, endi],n表示你有
幾個房間,meetings[]表示多個會議的開始時間和結束時間,會議按照以下規則進行安排
1.會議會被安排在沒人使用且編號最小的房間
2.如果沒有房間可用,會議會被延遲,消耗的時間和原本的時間相同。
3.當延遲的會議有房間可用時,較早開始的會議有較高的優先權。
找出哪個房間被用最多次,如果有多個房間使用次數相同返回編號最小的。
思路:
1.模擬排程,先依照會議開始時間排序會議。
2.如果n個房間裡面有沒安排會議的就直接安排當前會議,結束時間為meeting[1]
3.否則找出最快會結束的會議把這個延遲的會議安排給他,結束時間加上meetings[i]
的duration。
4.最後找出哪個會議室被用最多,返回編號小的。
pycode:
--------------------------------------------
class Solution:
def mostBooked(self, n: int, meetings: List[List[int]]) -> int:
times = [0] * n
room = [0] * n
meetings.sort()
for meeting in meetings:
finished = False
index = 0
for i in range(n):
if room[i] <= meeting[0]:
times[i] += 1
room[i] = meeting[1]
finished = True
break
if room[i] < room[index]:
index = i
if finished:
continue
times[index] += 1
room[index] += meeting[1] - meeting[0]
maxTimes = max(times)
return times.index(maxTimes)
--------------------------------------------
--
https://i.imgur.com/hqrJ7kl.jpg
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.100.73.13 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1708234610.A.ABF.html