首页 > 试题广场 >

主持人调度(二)

[编程题]主持人调度(二)
  • 热度指数:62721 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
有 n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第 i 个活动的开始时间是 starti ,第 i 个活动的结束时间是 endi ,举办某个活动就需要为该活动准备一个活动主持人。

一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。求为了成功举办这 n 个活动,最少需要多少名主持人。

数据范围: -2^{32} \le start_i\le end_i \le 2^{31}-1

复杂度要求:时间复杂度 ,空间复杂度
示例1

输入

2,[[1,2],[2,3]]

输出

1

说明

只需要一个主持人就能成功举办这两个活动      
示例2

输入

2,[[1,3],[2,4]]

输出

2

说明

需要两个主持人才能成功举办这两个活动      

备注:
start_i,end_i在int范围内
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 计算成功举办活动需要多少名主持人
# @param n int整型 有n个活动
# @param startEnd int整型二维数组 startEnd[i][0]用于表示第i个活动的开始时间,startEnd[i][1]表示第i个活动的结束时间
# @return int整型
#
class Solution:
    def minmumNumberOfHost(self , n , startEnd ):
        # write code here
        if not n:
            return 0
        start_time = []
        end_time = []
        for i in startEnd:
            start_time.append(i[0])
            end_time.append(i[1])
        start_time.sort()
        end_time.sort()
        
        res = 0
        for i in range(n):
            if start_time[i] < end_time[0]:
                res += 1
            else:
                end_time.pop(0)
        return res
        
        
        

发表于 2021-10-07 15:20:15 回复(0)
class Solution:
    def minmumNumberOfHost(self , n , startEnd ):
        ops = []
        for s, e in startEnd:
          ops.append((s, 1))
          ops.append((e, 0))
        ops.sort()
        ans = 0
        cur = 0
        for op in ops:
          if op[1] == 1:
            cur += 1
            ans = max(ans, cur)
          else:
            cur -= 1
        return ans

发表于 2021-07-03 10:58:15 回复(0)

# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 计算成功举办活动需要多少名主持人
# @param n int整型 有n个活动
# @param startEnd int整型二维数组 startEnd[i][0]用于表示第i个活动的开始时间,startEnd[i][1]表示第i个活动的结束时间
# @return int整型
#
class Solution:
    def minmumNumberOfHost(self , n , startEnd ):
        start=[]
        end=[]
        for i in range(n):
            start.append(startEnd[i][0])
            end.append(startEnd[i][1])

        start.sort()
        end.sort()
        count=0
        j=0
        for i in range(n):
            if start[i]>=end[j]:
                j+=1
            else:
                count+=1
        return count
        # write code here
发表于 2021-05-13 11:21:38 回复(0)