标签:贪心

本题的解题规律没有整明白,代码完全拷至: https://blog.nowcoder.net/n/147d14b917ba4eaca2c951628aaa5a30

解题思路:

step 1: 利用辅助数组获取单独各个活动开始的时间和结束时间,然后分别开始时间和结束时间进行排序,方便后面判断是否相交。

step 2: 遍历n个活动,如果某个活动开始的时间大于之前活动结束的时候,当前主持人就够了,活动结束时间往后一个。

step 3: 若是出现之前活动结束时间晚于当前活动开始时间的,则需要增加主持人。

class Solution:
    def minmumNumberOfHost(self , n: int, startEnd: List[List[int]]) -> int:
        start = list()
        end =list()
        #分别得到活动起始时间
        for i in range(n):
            start.append(startEnd[i][0])
            end.append(startEnd[i][1])
        #分别对开始和结束时间排序
        start.sort()
        end.sort()
        res = 0
        j = 0
        for i in range(n):
            #新开始的节目大于上一轮结束的时间,主持人不变
            if start[i] >= end[j]: 
                j += 1
            else:
                #主持人增加
                res += 1  
        return res

道理都明白,思路差不多,但自己实现的代码运行超时了……

class Solution:
    def minmumNumberOfHost(self , n: int, startEnd: List[List[int]]) -> int:
        temp = sorted(startEnd, key=lambda x: (x[0], x[1]))
        # 用于保存每个主持人的活动时间区间
        nums = [temp[0]]
        # 以主持人为单位,遍历所有活动,判断可以给哪个主持人安排
        for i in range(1, len(temp)):
            for j in range(len(nums)):
                if temp[i][0] >= nums[j][1]:
                    nums[j][1] = temp[i][1]
                    break
                else:
                    if j == len(nums) - 1:
                        nums.append(temp[i])
        return len(nums)