题解 | #主持人调度(二)#
主持人调度(二)
https://www.nowcoder.com/practice/4edf6e6d01554870a12f218c94e8a299
参考高赞回答,捋一下自己的思路:首先,如果所有活动都没有冲突,那么一个主持人就搞定了。如果有冲突,那么在某个时刻有不止一个活动在进行中,此时需要多个主持人。在某个时刻,同时进行的活动数目达到最大的时候,此时的主持人数目即为需要的最少的数目。
class Solution:
def minmumNumberOfHost(self , n: int, startEnd: List[List[int]]) -> int:
starts,ends=[],[]
# 将所有活动开始和结束的时间点分别记录下来
for act in startEnd:
starts.append(act[0])
ends.append(act[1])
# 升序排列
starts.sort()
ends.sort()
# i代表当前时刻(含)已经开始的活动数目,j代表截止当前时刻(含)已经结束的活动数目
i,j,holderNum=0,0,0
for startTime in starts: # 遍历所有开始时间点
i+=1 # 已开始的活动数+1
while(ends[j]<=startTime): # 截止目前已经结束的活动数目
j+=1
holderNum=max(holderNum,i-j) # 两者的差即为当前正在进行的活动数,维护一个最大值
return holderNum