题目描述:

实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。

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

日程可以用一对整数 start 和 end 表示,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < end 。

实现 MyCalendar 类:

MyCalendar() 初始化日历对象。
boolean book(int start, int end) 如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true 。否则,返回 false 并且不要将该日程安排添加到日历中。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/my-calendar-i

输入:

["MyCalendar", "book", "book", "book"]
[[], [10, 20], [15, 25], [20, 30]]
输出:
[null, true, false, true]

解释:

MyCalendar myCalendar = new MyCalendar();
myCalendar.book(10, 20); // return True
myCalendar.book(15, 25); // return False ,这个日程安排不能添加到日历中,因为时间 15 已经被另一个日程安排预订了。
myCalendar.book(20, 30); // return True ,这个日程安排可以添加到日历中,因为第一个日程安排预订的每个时间都小于 20 ,且不包含时间 20 。
## 解题思路
因为需要持久化之前所有的预定,所以考虑使用一个链表保存所有的预定时间
后续添加时比对,所以类里只需要一个链表。

java代码:

// An highlighted block
class MyCalendar {//链表里保存所有预定的起止时间List<Integer[]> calender;public MyCalendar() {calender=new ArrayList<>();}public boolean book(int start, int end) {for(int i=0;i<calender.size();i++){Integer[] arr=calender.get(i);int left = arr[0];int right= arr[1];//一端在里一端在外  || 包含 返回falseif(start>=left&&start<right){return false;}if(end>left&&end<=right){return false;}if(start<=left&&end>=right){return false;}}calender.add(new Integer[]{start,end});return true;}
}

python代码

class MyCalendar(object):def __init__(self):self.calender = []def book(self, start, end):""":type start: int:type end: int:rtype: bool"""i = 0while i<len(self.calender):arr = self.calender[i]left = arr[0];right= arr[1];if start>=left and start<right:return Falseif end>left and end<=right:return Falseif start<=left and end>=right:return Falsei+=1self.calender.append([start,end])return True
运行截图:



可以看出,两种语言执行用时有较大差距。

【leetcode729:我的日程安排表】相关推荐

  1. 模拟(持续更新、整理)

    链表 两数相加:leetcode-2 两两交换链表只能够的节点:leetcode-24 K个一组翻转链表:leetcode-25 旋转链表:leetcode-61 反转链表II:leetcode-92 ...

  2. 数学(持续更新、整理)

    两数相加:leetcode-2 Z字形变换:leetcode-6 整数反转:leetcode-7 Pow(x, n):leetcode-50 排列序列:leetcode-60 爬楼梯:leetcode ...

  3. LeetCode 732. 我的日程安排表 III(差分思想)

    文章目录 1. 题目 2. 解题 1. 题目 实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排. MyCalendar 有一个 book(int start, int ...

  4. LeetCode 729. 我的日程安排表 I(set 二分查找)

    文章目录 1. 题目 2. 解题 2.1 set 二分查找 2.2 差分思想 1. 题目 实现一个 MyCalendar 类来存放你的日程安排.如果要添加的时间内没有其他安排,则可以存储这个新的日程安 ...

  5. matlab教师考试安排,中小学教师资格证考试2018年上半年(笔试)日程安排表

    2018年上半年中小学教师资格考试(笔试)日程安排表 时间 类别 3月17日(星期六) 上 午 下 午 下 午 9:00-11:00 13:00-15:00 16:00-18:00 幼儿园 综合素质( ...

  6. 732. 我的日程安排表 III

    732. 我的日程安排表 III 原始题目链接:https://leetcode.cn/problems/my-calendar-iii/ 当 k 个日程安排有一些时间上的交叉时(例如 k 个日程安排 ...

  7. 我的日程安排表I II III

    我的日程安排表I 我的日程安排表II 我的日程安排表III 转载做题方法! 今天介绍的方法叫插旗法,其实我最早是在253. 会议室Ⅱ中介绍过,但是由于很多同学不是会员,刚好今天又看到这种类型的题,所以 ...

  8. 力扣:我的日程安排表I

    package com.算法专练.力扣.我的日程安排表I;import java.util.ArrayList; import java.util.List;/*** @author xnl* @De ...

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

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

  10. leetcode-每日一题731. 我的日程安排表 II

    题目链接:https://leetcode.cn/problems/my-calendar-ii/ 孪生弟弟题 729. 我的日程安排表 I:https://leetcode.cn/problems/ ...

最新文章

  1. 《HTML5游戏编程核心技术与实战》——2.8 小结
  2. ThinkPHP快捷查询
  3. vrep和matlab,VREP与MATLAB联合仿真程序--UR5机械臂动力学控制
  4. 分块的单点修改查询区间和_模版 单点修改,区间查询
  5. postman--安装及Interceptor插件
  6. 手抄Threejs源码之Scene
  7. android自定义图片加载,Android自定义ProgressDialog加载图片
  8. 去掉Win7资源管理器左侧不需要的项目
  9. Python+psutil获取本机所有联网的应用程序信息
  10. 刚刚人均国民收入突破1万美元,作为打工人的你有感知吗?
  11. PubLayNet:36万文档图像版面分析数据集
  12. Q79:怎么用三角形网格(Triangle Mesh)细分曲面
  13. Java Web架构演变
  14. apache php的权限,Unix上的Apache PHP写权限
  15. 普通用户添加systemctl 自定义服务的开机启动项
  16. Ghost Win7删除桌面IE图标
  17. [渝粤教育] 中国地质大学 建筑艺术赏析 复习题
  18. python爬取百度的工具_Python爬虫之小试牛刀——使用Python抓取百度街景图像
  19. 网络用语大扫盲?今天 你说了没?
  20. 2021-05-27let的TDZ

热门文章

  1. Excel正确输入身份证号码
  2. 什么是DNS的正向解析与反向解析?代码实现?
  3. 苹果企业开发账号申请三步走
  4. 开放报名 | “2021 年全国人工智能大赛”正式开赛
  5. 微乐服务器升级维护需要多久,微信系统升级要多久?微信系统维护一般要多久?...
  6. 关闭默认共享-关于Windows的默认共享介绍
  7. 跳转到高德地图或百度地图或高德网页导航
  8. (Scrapy框架)爬虫获取新冠疫情数据升级版 | 爬虫案例
  9. 大型国企用泛微OA,让会务管理有序,让会议开展高效
  10. 狂奔五年后,拼多多需要静静