首页 > 试题广场 >

主持人调度(一)

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

一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。请问一个只有一个主持人能否举办全部活动。

数据范围:
示例1

输入

[[0,10],[10,20],[20,30]]

输出

true
示例2

输入

[[0,10],[10,20],[15,30]]

输出

false
# -*- coding: utf-8 -*-

# coding:utf-8
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param schedule int整型二维数组
# @return bool布尔型
#
class Solution:
    """
    题目:
        https://www.nowcoder.com/practice/e160b104354649b69600803184094adb?tpId=196&tqId=40514&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D8%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=undefined&judgeStatus=undefined&tags=&title=
    算法:
        同一时间段,支持人只能参加一个活动,问题是一个能否主持所有活动,换句话说就是看所有的活动区间是否重合
        如果不重合:
            返回True;
        否则:
            返回False
    复杂度:
        时间复杂度:O(nlogn)
        空间复杂度:O(n)
    """

    def hostschedule(self, schedule):
        # write code here
        schedule.sort(key=lambda x: x[0])

        end, n = schedule[0][1], len(schedule)
        for i in range(1, n):
            if end > schedule[i][0]:  # 如果前一个活动的结束时间 > 下一个活动的开始时间,说明区间重合,返回False
                return False
            else:
                end = max(end, schedule[i][1]) # 更新活动结束时间

        return True


if __name__ == "__main__":
    sol = Solution()

    # schedule = [[0, 10], [10, 20], [20, 30]]

    schedule = [[0, 10], [10, 20], [15, 30]]

    res = sol.hostschedule(schedule)

    print res

发表于 2022-06-23 16:26:30 回复(0)