【leetcode729:我的日程安排表】
题目描述:
实现一个 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:我的日程安排表】相关推荐
- 模拟(持续更新、整理)
链表 两数相加:leetcode-2 两两交换链表只能够的节点:leetcode-24 K个一组翻转链表:leetcode-25 旋转链表:leetcode-61 反转链表II:leetcode-92 ...
- 数学(持续更新、整理)
两数相加:leetcode-2 Z字形变换:leetcode-6 整数反转:leetcode-7 Pow(x, n):leetcode-50 排列序列:leetcode-60 爬楼梯:leetcode ...
- LeetCode 732. 我的日程安排表 III(差分思想)
文章目录 1. 题目 2. 解题 1. 题目 实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排. MyCalendar 有一个 book(int start, int ...
- LeetCode 729. 我的日程安排表 I(set 二分查找)
文章目录 1. 题目 2. 解题 2.1 set 二分查找 2.2 差分思想 1. 题目 实现一个 MyCalendar 类来存放你的日程安排.如果要添加的时间内没有其他安排,则可以存储这个新的日程安 ...
- matlab教师考试安排,中小学教师资格证考试2018年上半年(笔试)日程安排表
2018年上半年中小学教师资格考试(笔试)日程安排表 时间 类别 3月17日(星期六) 上 午 下 午 下 午 9:00-11:00 13:00-15:00 16:00-18:00 幼儿园 综合素质( ...
- 732. 我的日程安排表 III
732. 我的日程安排表 III 原始题目链接:https://leetcode.cn/problems/my-calendar-iii/ 当 k 个日程安排有一些时间上的交叉时(例如 k 个日程安排 ...
- 我的日程安排表I II III
我的日程安排表I 我的日程安排表II 我的日程安排表III 转载做题方法! 今天介绍的方法叫插旗法,其实我最早是在253. 会议室Ⅱ中介绍过,但是由于很多同学不是会员,刚好今天又看到这种类型的题,所以 ...
- 力扣:我的日程安排表I
package com.算法专练.力扣.我的日程安排表I;import java.util.ArrayList; import java.util.List;/*** @author xnl* @De ...
- Python描述 LeetCode 732. 我的日程安排表 III
Python描述 LeetCode 732. 我的日程安排表 III 大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术博文,主要包 ...
- leetcode-每日一题731. 我的日程安排表 II
题目链接:https://leetcode.cn/problems/my-calendar-ii/ 孪生弟弟题 729. 我的日程安排表 I:https://leetcode.cn/problems/ ...
最新文章
- 《HTML5游戏编程核心技术与实战》——2.8 小结
- ThinkPHP快捷查询
- vrep和matlab,VREP与MATLAB联合仿真程序--UR5机械臂动力学控制
- 分块的单点修改查询区间和_模版 单点修改,区间查询
- postman--安装及Interceptor插件
- 手抄Threejs源码之Scene
- android自定义图片加载,Android自定义ProgressDialog加载图片
- 去掉Win7资源管理器左侧不需要的项目
- Python+psutil获取本机所有联网的应用程序信息
- 刚刚人均国民收入突破1万美元,作为打工人的你有感知吗?
- PubLayNet:36万文档图像版面分析数据集
- Q79:怎么用三角形网格(Triangle Mesh)细分曲面
- Java Web架构演变
- apache php的权限,Unix上的Apache PHP写权限
- 普通用户添加systemctl 自定义服务的开机启动项
- Ghost Win7删除桌面IE图标
- [渝粤教育] 中国地质大学 建筑艺术赏析 复习题
- python爬取百度的工具_Python爬虫之小试牛刀——使用Python抓取百度街景图像
- 网络用语大扫盲?今天 你说了没?
- 2021-05-27let的TDZ
热门文章
- Excel正确输入身份证号码
- 什么是DNS的正向解析与反向解析?代码实现?
- 苹果企业开发账号申请三步走
- 开放报名 | “2021 年全国人工智能大赛”正式开赛
- 微乐服务器升级维护需要多久,微信系统升级要多久?微信系统维护一般要多久?...
- 关闭默认共享-关于Windows的默认共享介绍
- 跳转到高德地图或百度地图或高德网页导航
- (Scrapy框架)爬虫获取新冠疫情数据升级版 | 爬虫案例
- 大型国企用泛微OA,让会务管理有序,让会议开展高效
- 狂奔五年后,拼多多需要静静