题目:
有 n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第 i 个活动的开始时间是 starti ,第 i 个活动的结束时间是 endi ,举办某个活动就需要为该活动准备一个活动主持人。
一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。求为了成功举办这 n 个活动,最少需要多少名主持人。

方法一:
思路1:

解答1:
class Solution:
def minmumNumberOfHost(self , n: int, startEnd: List[List[int]]) -> int:
starts=[]
ends=[]
for start,end in startEnd:
starts.append(start);
ends.append(end);
starts.sort();
ends.sort()
# 统计同一时间的活动个数
count = 0
max_num = 0
# 活动索引号
i, j = 0, 0
while i < n and j < n:
# 有新活动开始
if starts[i] < ends[j]:
# 转到下个活动的开始时间作对比
i += 1
count += 1
# 记录过程中的最大个数
max_num = max(max_num, count)
# 一个活动开始同时一个活动结束
elif starts[i] == ends[j]:
i += 1
j += 1
# 一个活动结束
else:
# 转到下个活动的结束时间作对比
j += 1
count -= 1
# 返回最大值(同一时间最多有多少个活动在举行)
return max_num
方法二:
思路2:
将活动开始时间写入一个列表starts,进行排序。
将活动结束时间写入一个列表ends,进行排序。
每次活动开始时,需要增加一个主持人上场,每次活动结束时候可以释放一个主持人。
所以按照时间先后顺序对starts进行遍历,每次有活动开始count++,每次有活动结束count–
在count最大的时候,即是需要主持人最多的时候
解答2:
class Solution:
def minmumNumberOfHost(self , n: int, startEnd: List[List[int]]) -> int:
starts=[]
ends=[]
for start,end in startEnd:
starts.append(start);
ends.append(end);
starts.sort();
ends.sort()
i,j,count,res=0,0,0,0
#time为当前时间
for time in starts:
#若当前时间(time)活动i开始,则需要新增一个主持人
while(i<n and starts[i]<=time):
i+=1
count+=1
#若当前时间(time)活动j结束,则可以释放一个主持人
while(j<n and ends[j]<=time):
j+=1
count-=1
if count>res:
res=count
#print(time,i,j,count,res)
return res

这篇博客介绍了两种方法来解决活动调度问题,确保每个活动都有主持人全程参与且不冲突。方法一是通过比较活动的开始和结束时间,统计同一时间的活动数量以确定最大需求。方法二是按照活动开始时间顺序,增加或减少主持人计数,找出最大主持人需求。这两种方法都旨在高效地安排主持人,以最少的数量满足所有活动的需求。
300

被折叠的 条评论
为什么被折叠?



