Leetcode地址:729. 我的日程安排表 I - 力扣(LeetCode)

题目理解

两个区间[s1,e1],[s2,e2]无交集的时候,e1<=s2或,e2<=s1。故而判定有交集的时候:s1<e2 and e1>s2

解法1.直接遍历

时间复杂度:O(n^2)

空间复杂度:O(n)

代码如下:

class MyCalendar:def __init__(self):self.books=[]def book(self, start: int, end: int) -> bool:if any(start<r and end>l for l,r in self.books):return Falseself.books.append((start,end))return True

解法2:二分查找

根据性质,start插入的位置应为偶数,且end小于后一个位置,因为后一个位置是下一个区间的开始。

时间复杂度:O(nlogn), 二分查找的时间复杂度为O(logn)

空间复杂度:O(n)

因为这里如果出现(10,20)(20,30)这种start2=end1的情况,是属于不交叉的,所以二分查找时选择bisect_right

!需要注意的是,book[i:i]的赋值在python中是O(n)的复杂度,数据量大时会超时。

代码如下:

from bisect import bisect_right
class MyCalendar:def __init__(self):self.books=[]def book(self, start: int, end: int) -> bool:i=bisect_right(self.books,start)if i%2==1 or (i<len(self.books) and self.books[i]<end):return Falseself.books[i:i]=[start,end]return True

LC729.我的日程表相关推荐

  1. 软件纠错的六个阶段——《论死亡与临终》中的“库伯勒-罗丝模型”

    我估计很少人知道这个库伯勒-罗丝模型或读过伊丽莎白‧库伯勒-罗丝的<论死亡与临终>这本书.先让大家了解一下这个模型. 什么是"库伯勒-罗丝模型" 库伯勒-罗丝模型(Kü ...

  2. java 计划日视图,GitHub - sddysz/calendarSchedule: 日程表,仿滴答清单,包含日视图、三日视图、周视图、月视图、列表视图、同步手机系统日程、添加日程...

    calendarSchedule 日程表,仿滴答清单,包含日视图.三日视图.周视图.月视图.列表视图 此项目是仿滴答清单做的一个日程表,现包括的功能有:日视图.三日视图.周视图.月视图.列表视图(周月 ...

  3. python【数据结构与算法】循环赛日程表(分治)

    文章目录 1 概述 2 解决 1 概述 设计一个满足以下要求的比赛日程表: 每个选手必须与其他n-1个选手各赛一次: 每个选手一天只能赛一次: 循环赛一共需要进行n-1天. 由于n=2^k个运动员,显 ...

  4. 2006年世界杯小组赛日程表

    2006年世界杯小组赛日程表 业余爱好,现在这里记录一下,以便查阅 赛程-时间 赛程-小组赛 赛程-淘汰赛 场序 日期 时间 地点 A组对阵 1 6月10日 00:00 慕尼黑 德国-哥斯达黎加 2 ...

  5. 分治法之循环赛日程表

    问题描写叙述:             设有n(n = 2^k)位选手參加网球循环赛,循环赛共进行n-1天,每位选手要与         其它n-1位选手比赛一场,且每位选手每天必须比赛一场,不能轮空 ...

  6. 分治法【锦标赛问题:设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次; (2)每个选手一天只能赛一次; (3)循环赛一共进行n-1天。】

    目   录 1.问题 2.问题分析 3.程序代码(非递归) 4.程序代码(递归) 5.总结 1.问题 锦标赛问题:设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次: ( ...

  7. 利用 Sunbird 处置你的日程表

    Toy Posted in Apps Sunbird 是由 Mozilla Powered 的自力日程表处置轨范,它基于 XUL 构建,具有很好的跨平台特性.目前,Sunbird 如故在测试当中,尚无 ...

  8. 用递归与分治策略求解网球循环赛日程表_算法设计:分治法(比赛日程安排)...

    一.算法思路 1.思路 分治算法的思想是:对于一个规模位N的问题,若该问题可以容易解决(比如规模N较小),则直接解决,否则将其分解为M个规模较小的子问题,这些子问题互相独立,并且与原问题形式相同,递归 ...

  9. 减肥日程表(WPS文档反馈群253147947)

    减肥日程表(WPS文档反馈群253147947) 一.注意事项 1.主食不可不吃: 2.不必拒绝肉类: 3.要减少摄取甜食.酒及糖分高的水果. 二.要求 1.多喝温热的水或常温的食物,不能吃冷饮,喝冰 ...

最新文章

  1. 从简单到高并发服务器(一)
  2. linux开启kafka消费者命令,Linux kafka常用命令
  3. [深度学习]Ubuntu16.04 + GTX 1050 + cuda8.0 + cuDNN5.1 + caffe安装详解
  4. Python—Mysql—Dbvisualizer
  5. Mybatis insert操作细节【ID】
  6. PID控制器改进笔记之二:改进PID控制器之手自动切换
  7. OpenCV Mat基础认知感
  8. Android Themes与Styles实践
  9. qt 右键显示设置界面 后台运行_1.1安装Qt
  10. node csrf 防御 待续
  11. RHCE 学习笔记(32) - DNS
  12. Java String startsWith()方法
  13. DBV命令行工具检测坏块
  14. 苏州大学计算机考研资料汇总
  15. java将bmp文件转为jpg_在PHP中将BMP转换为JPG
  16. Hadoop从零开始的搭建(伪分布式)
  17. 《Qt 学习之路 2》
  18. Zxing系列之设置二维码图片背景透明教程
  19. 35岁,还学编程是不是很难
  20. iOS 识别车辆vin码方法汇总,免费并且效果极佳识别速度极快OCR识别VIN码

热门文章

  1. 2020软科中国最好学科排名:计算机科学与技术
  2. 谈谈那些被京东撸货“割韭菜”那群人,看看有你没?
  3. 单片机项目式教学训练-基于DS1302电子钟设计与应用(第3天)
  4. SpringBoot简单项目搭建,从数据读取数据展示到页面
  5. 打怪游戏(还是半成品)
  6. SocketIO の 聊天练习
  7. 华为 WATCH Ultimate 如何开通和使用北斗卫星卡
  8. Linux 重命名文件名 rename
  9. WIN10蓝牙不可用,操作中心没有蓝牙图标的解决方法
  10. 操作系统8-死锁和进程通信----(库函数scanf和printf是基于管道读写实现的!