Skip to content

Commit 8d827bf

Browse files
authored
Update 0253-会议室II.py
1 parent 9a5ffac commit 8d827bf

File tree

1 file changed

+26
-16
lines changed

1 file changed

+26
-16
lines changed

0253.会议室II/0253-会议室II.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,33 @@
1+
# 给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei),
2+
# 为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。
3+
4+
# 题目给出若干区间,问最多有几个区间发生重叠。这个问题非常适合适用差分数组来求解。
5+
# 具体来说,就是使用一个计数器cnt表示当前正在召开的会议,然后从小到大遍历所有的时间点。
6+
# 若当前时间点有会议召开,那么就将cnt加上1,反之,若当前时间有会议结束,那么就将cnt减去1。
7+
# 得到最新的cnt之后,则使用cnt来更新答案。
8+
9+
# 在这里需要特别注意的是,由于题目中的区间是左闭右开的,因此在计算cnt时如果碰到相同的时间点,则应该先处理结束的会议,再处理新召开的会议。
10+
# 例如两场会议,时间分别是[1, 3)和[3, 5),那么在3这个时间点应该先处理[1, 3)的结束,再处理[3, 5)的召开。
11+
112
class Solution(object):
213
def minMeetingRooms(self, intervals):
314
"""
415
:type intervals: List[List[int]]
516
:rtype: int
617
"""
7-
if not intervals:
8-
return 0
9-
if not intervals[0]:
10-
return 1
11-
intervals = sorted(intervals, key = lambda x: x[1])
12-
record = [0 for _ in range(intervals[-1][1] + 1)]
18+
19+
res = cnt = 0
20+
time_points = []
21+
for x, y in intervals:
22+
time_points.append([x, 1])
23+
time_points.append([y, 0])
1324

14-
for interval in intervals:
15-
# print record
16-
begin, end = interval[0], interval[1]
17-
record[begin] += 1
18-
record[end] -= 1
19-
20-
for i, x in enumerate(record):
21-
if i > 0:
22-
record[i] += record[i - 1]
23-
return max(record)
25+
for t, p in sorted(time_points):
26+
if p == 0:
27+
cnt -= 1
28+
else:
29+
cnt += 1
30+
31+
res = max(res, cnt)
32+
33+
return res

0 commit comments

Comments
 (0)