问题描述
这是一段非常神秘的代码,我读过但无法理解。我会在这里发帖并寻求专家的帮助。如果给定一些会议日程,即将决定最少需要多少间会议室。
例如,如果会议日程是 - [[1,10],[5,12],[10,15]] 那么它至少需要 2 个房间。
代码如下:
def mini_room(intervals):
room,current = 0,0
for i,v in sorted(x for i,j in intervals for x in [[i,1],[j,-1]]):
current += v
room = max(room,current)
print(mini_room(meetings)) #
解决方法
方法很简单。您需要一个计数器,它在事件开始时递增,在事件结束时递减。该计数器的最大值将为您提供所需的房间数。
“令人困惑”的语句 for i,v in sorted(x for i,j in intervals for x in [[i,1],[j,-1]])
本质上是这样做的:
- 对于每个区间
i,j
,它把它分解成[i,1]
和[j,-1]
- 创建所述间隔的列表
- 对它们进行排序并遍历它
1
被添加到 i
(在 [i,1]
中)因为就像我上面解释的那样,当事件开始时计数器需要增加。 1
标记新事件,并将此值添加到计数器中。同样,-1
中的 [j,-1]
标记事件结束并从计数器中减去。
编辑:
这是一个简化版本。
simple = []
for i in intervals:
simple.append([i[0],1])
simple.append([i[1],-1])
simple.sort()
counter = 0
ans = 0
for i in simple:
counter += i[1]
ans = max(ans,counter)
print(ans)