Re: [闲聊] 每日leetcode

楼主: DJYOSHITAKA (Evans)   2024-09-26 23:28:17
用self.time把start跟end都推进去(照顺序单调递增)
然后另外记下哪些是start时间
如果可以插入的话
bisect_right(start) 会等于 bisect_left(end)
但要注意单纯符合这个条件不够 因为可能会被另外一个事件完整包住
这样这两个也会相等
所以再加一个条件 就是找到的前一个index不能是start的时间
这样就可以了
但这个判断式当l=r=0时会out of bound
就另外注意
搞得有点复杂==
class MyCalendar:
def __init__(self):
self.times = []
self.starts = set()
def book(self, start: int, end: int) -> bool:
l = bisect_right(self.times, start)
r = bisect_left(self.times, end)
if (l==0 and r==0) or (l==r and (self.times[l-1] not in self.starts)):
self.times.insert(l, start)
self.times.insert(l+1, end)
self.starts.add(start)
return True
else:
return False

Links booklink

Contact Us: admin [ a t ] ucptt.com