python 日程管理程序_729. 我的日程安排表(Python)
难度:★★★☆☆
类型:数组
方法:二分法
力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录
实现一个 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)相关推荐
- python 日程管理程序_日程管理软件走马观花
前段时间因好奇心驱使,尝试了一些比较知名的日程管理软件,包括 Things 3 OmniFocus 3 Sorted 3 The Hit List My Life Organized 每一款软件使用的 ...
- Python描述 LeetCode 732. 我的日程安排表 III
Python描述 LeetCode 732. 我的日程安排表 III 大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术博文,主要包 ...
- 40岁学python有前途吗-西安新城区学python人工智能少儿编程哪家机构好
我AI还没入门,熊孩子已经玩起了Python 21世纪有前途的朝阳产业是什么?--人工智能! 21世纪缺的是什么?--人才! 21世纪缺的是那种类型的人才?--AI人才! 人工智能是明日之星,已经是不 ...
- python适合做后端开发吗-用Python开发app后端有优势吗
app后端开发学Python. Python的优点: 1.简单易学 Python 编程语言最大的优点之一,是其具有伪代码的特质,它可以让我们在开发 Python 程序时,专注于解决问题,而不是搞明白语 ...
- python培训比较好的机构-上海python培训比较好的机构
现如今,python语言非常火热,对于python人才的需求量也在逐年攀升.那么,python语言的优势有哪些?下面我们了解下. Python语言主要有以下9个优势: (1)简单易学 Python是一 ...
- 简述python的优点_Python是什么及Python的优点和缺点
前面提到,编程语言有"高低"之分,而高级语言又有诸多版本,比如 C .C++.Java 等,「Python」也是其中之一.Python 语言算得上一门"古老"的 ...
- python适合用来做什么游戏,python 主要用来做什么
python能做什么工作 现在互联网发展迅速,众多行业巨头,都已经转投到人工智能领域,而人工智能的首选编程语言就是python,所以学好Python能够从事的工作还是很多的,而且前景非常不错. 学完p ...
- 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 ...
- python速成要多久2019-8-28_2019最全Python入门学习路线,不是我吹,绝对是最全
近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多.一些学习Python的小白在学习初期,总希望能够得到一份Python学习路线图,小编经过多方汇总为大家汇总了一份Python学 ...
- python和anaconda的区别_anaconda和python区别
详细内容 python python自身缺少numpy.matplotlib.scipy.scikit-learn....等一系列包,需要我们安装pip来导入这些包才能进行相应运算(python3.5 ...
最新文章
- Java Web 高性能开发,前端的高性能
- 重磅!就在刚刚,吊打一切的 YOLOv4 开源了!
- Deep Learning菜鸡篇,我的第一个深度神经网络
- 不均衡数据的处理方法
- 从像素坐标到相机坐标_多视图几何基础——深入理解相机内外参数
- MIPS指令:常用R型、I型、J型指令编解码表
- 对bmp文件内存压缩 与 解压缩
- 第二:Postman做各种类型的http接口测试
- 刘海屏的MacBook Pro还值得入手吗?
- mysql concat函数进行模糊查询
- eplan好看的电缆图表_EPLAN电缆图表模板
- 2018年迎春杯复赛入围名单(四年级)
- 数组除重和运用随机点名的简单运用
- 程序员有哪些类型,分别薪资是多少,带你一起走进程序员的大门
- 怀旧服服务器维护以后精英怪,《魔兽世界》:看不起怀旧服精英怪,一定吃不了兜着走...
- 直接启动htpp服务
- Linux 学习笔记16 信号量
- 计算机二级C语言考试地点,最新计算机二级《C语言》重要考点
- 这款开源工具绝了!!!
- luogu P1710 地铁涨价