难度:★★★☆☆

类型:数组

方法:二分法

力扣链接请移步本题传送门

更多力扣中等题的解决方案请移步力扣中等题目录

实现一个 MyCalendar 类来存放你的日程安排。如果要添加的时间内没有其他安排,则可以存储这个新的日程安排。

MyCalendar 有一个 book(int start, int end)方法。它意味着在 start 到 end 时间内增加一个日程安排,注意,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < end。

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

每次调用 MyCalendar.book方法时,如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true。否则,返回 false 并且不要将该日程安排添加到日历中。

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

示例 1:

MyCalendar();

MyCalendar.book(10, 20); // returns true

MyCalendar.book(15, 25); // returns false

MyCalendar.book(20, 30); // returns true

解释:

第一个日程安排可以添加到日历中. 第二个日程安排不能添加到日历中,因为时间 15 已经被第一个日程安排预定了。

第三个日程安排可以添加到日历中,因为第一个日程安排并不包含时间 20 。

说明:

每个测试用例,调用 MyCalendar.book 函数最多不超过 100次。

调用函数 MyCalendar.book(start, end)时, start 和 end 的取值范围为 [0, 10^9]。

解答

这道题是考察使用二分法做插入排序的。

我们在初始化时,构建两个列表,分别代表每个时间的开始和结束时间。注意这两个列表最开始不是空的,而是有一个元素,用来避免后续使用时下标越界。这个元素是负无穷,由于所有测试用例开始和结束时间都是非负,因此可以用-1替代。在后续遍历过程中,要保证两个列表随时都是升序排列的。

我们使用python自带的bisect工具包可以方便的实现插入排序。例如bisect_right([1,1,2,2,3,3], 2)返回结果是4,意思是如果想把2插入到[1,1,2,2,3,3]中,放在下标为4的位置就好了,可以使整体有序。

因此,我们可以方便的实现插入排序。这里需要返回新的日程能否被插入,也就需要判断一下新插入的时间段是否与其他时间段冲突。理论上我们只需要判断self.right[idx-1] <= start < end <= self.left[idx])就好,但是存在一个特殊情况,即返回的idx恰好当前列表长度相等,相当于需要把当前时间段插入到最末尾。因此,需要针对这种情况进行特别的对待。

代码如下。

class MyCalendar:

def __init__(self):

self.left = [-1]

self.right = [-1]

def book(self, start: int, end: int) -> bool:

idx = bisect_right(self.left, start)

if self.right[idx-1] <= start and (idx == len(self.left) or end <= self.left[idx]):

self.left.insert(idx, start)

self.right.insert(idx, end)

return True

return False

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步力扣中等题解析

python 日程管理程序_729. 我的日程安排表(Python)相关推荐

  1. python 日程管理程序_日程管理软件走马观花

    前段时间因好奇心驱使,尝试了一些比较知名的日程管理软件,包括 Things 3 OmniFocus 3 Sorted 3 The Hit List My Life Organized 每一款软件使用的 ...

  2. Python描述 LeetCode 732. 我的日程安排表 III

    Python描述 LeetCode 732. 我的日程安排表 III   大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术博文,主要包 ...

  3. 40岁学python有前途吗-西安新城区学python人工智能少儿编程哪家机构好

    我AI还没入门,熊孩子已经玩起了Python 21世纪有前途的朝阳产业是什么?--人工智能! 21世纪缺的是什么?--人才! 21世纪缺的是那种类型的人才?--AI人才! 人工智能是明日之星,已经是不 ...

  4. python适合做后端开发吗-用Python开发app后端有优势吗

    app后端开发学Python. Python的优点: 1.简单易学 Python 编程语言最大的优点之一,是其具有伪代码的特质,它可以让我们在开发 Python 程序时,专注于解决问题,而不是搞明白语 ...

  5. python培训比较好的机构-上海python培训比较好的机构

    现如今,python语言非常火热,对于python人才的需求量也在逐年攀升.那么,python语言的优势有哪些?下面我们了解下. Python语言主要有以下9个优势: (1)简单易学 Python是一 ...

  6. 简述python的优点_Python是什么及Python的优点和缺点

    前面提到,编程语言有"高低"之分,而高级语言又有诸多版本,比如 C .C++.Java 等,「Python」也是其中之一.Python 语言算得上一门"古老"的 ...

  7. python适合用来做什么游戏,python 主要用来做什么

    python能做什么工作 现在互联网发展迅速,众多行业巨头,都已经转投到人工智能领域,而人工智能的首选编程语言就是python,所以学好Python能够从事的工作还是很多的,而且前景非常不错. 学完p ...

  8. uwsgi 安装报错 plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory

    1. Python3 安装 uwsgi 报错 直接使用命令 sudo pip3 install uwsgi 安装如下错误: ubuntu@ubuntu:~/Downloads$ sudo pip3 i ...

  9. python速成要多久2019-8-28_2019最全Python入门学习路线,不是我吹,绝对是最全

    近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多.一些学习Python的小白在学习初期,总希望能够得到一份Python学习路线图,小编经过多方汇总为大家汇总了一份Python学 ...

  10. python和anaconda的区别_anaconda和python区别

    详细内容 python python自身缺少numpy.matplotlib.scipy.scikit-learn....等一系列包,需要我们安装pip来导入这些包才能进行相应运算(python3.5 ...

最新文章

  1. Java Web 高性能开发,前端的高性能
  2. 重磅!就在刚刚,吊打一切的 YOLOv4 开源了!
  3. Deep Learning菜鸡篇,我的第一个深度神经网络
  4. 不均衡数据的处理方法
  5. 从像素坐标到相机坐标_多视图几何基础——深入理解相机内外参数
  6. MIPS指令:常用R型、I型、J型指令编解码表
  7. 对bmp文件内存压缩 与 解压缩
  8. 第二:Postman做各种类型的http接口测试
  9. 刘海屏的MacBook Pro还值得入手吗?
  10. mysql concat函数进行模糊查询
  11. eplan好看的电缆图表_EPLAN电缆图表模板
  12. 2018年迎春杯复赛入围名单(四年级)
  13. 数组除重和运用随机点名的简单运用
  14. 程序员有哪些类型,分别薪资是多少,带你一起走进程序员的大门
  15. 怀旧服服务器维护以后精英怪,《魔兽世界》:看不起怀旧服精英怪,一定吃不了兜着走...
  16. 直接启动htpp服务
  17. Linux 学习笔记16 信号量
  18. 计算机二级C语言考试地点,最新计算机二级《C语言》重要考点
  19. 这款开源工具绝了!!!
  20. luogu P1710 地铁涨价

热门文章

  1. 【C语言】输出“*”菱形图案
  2. SecureCRT 64位 安装破解版v8.1.4
  3. FIR数字滤波器在MATLAB中的实现
  4. c语言 滑窗法_窗函数的C语言实现
  5. 云服务器ecs什么意思
  6. 外卖分销分佣小程序外卖cps小程序返利系统源码分享
  7. Bootstrap练习:百度登录框
  8. 电脑键盘上的快捷建大全
  9. 招投标工作中投标书编制的流程是怎样的?
  10. 求解会议安排问题 C++实现