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