Leectcode732. 我的日程安排表 III:

Leectcode732. 我的日程安排表 III:

      实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排。MyCalendar 有一个 book(int start, int end)方法。它意味着在start到end时间内增加一个日程安排,注意,这里的时间是半开区间,即 [start, end),左闭右开, 日历 x 的范围为,  start <= x < end。

当 K 个日程安排有一些时间上的交叉时(例如K个日程安排都在同一时间内),就会产生 K 次预订。

每次调用 MyCalendar.book方法时,返回一个整数 K ,表示最大的 K 次预订。

请按照以下步骤调用MyCalendar 类: MyCalendar cal = new MyCalendar(); MyCalendar.book(start, end)

思路很重要思路: 

第一次K为1 因为在区间 [start, end)最少有1个可以book的日程

第二次K为2因为在另外一个区间与 [start, end)有交集

第三次K为3,因为在第三个区间内又有与 [start, end)有交集

import collections


class MyCalendarThree:

    def __init__(self):

        #构建字典对象
        self.book_dict = collections.defaultdict(int)

    def book(self, start: 'int', end: 'int') -> 'int':
        self.book_dict[start]+=1
        self.book_dict[end]-=1
        outdegree = 0
        max = 0

        #计算出度则为最大预订次数
        for i,j in sorted(self.book_dict.items()):
            outdegree+=j
            if max < outdegree:
                max=outdegree
        return max

posted on 2020-04-16 17:19  牛气冲天  阅读(248)  评论(0编辑  收藏  举报