732. 我的日程安排表 III
732. 我的日程安排表 III
原始题目链接:https://leetcode.cn/problems/my-calendar-iii/
当 k 个日程安排有一些时间上的交叉时(例如 k 个日程安排都在同一时间内),就会产生 k 次预订。
给你一些日程安排 [start, end) ,请你在每个日程安排添加后,返回一个整数 k ,表示所有先前日程安排会产生的最大 k 次预订。
实现一个 MyCalendarThree 类来存放你的日程安排,你可以一直添加新的日程安排。
MyCalendarThree() 初始化对象。
int book(int start, int end) 返回一个整数 k ,表示日历中存在的 k 次预订的最大值。
示例:
输入:
[“MyCalendarThree”, “book”, “book”, “book”, “book”, “book”, “book”]
[[], [10, 20], [50, 60], [10, 40], [5, 15], [5, 10], [25, 55]]
输出:
[null, 1, 1, 2, 3, 3, 3]
解释:
MyCalendarThree myCalendarThree = new MyCalendarThree();
myCalendarThree.book(10, 20); // 返回 1 ,第一个日程安排可以预订并且不存在相交,所以最大 k 次预订是 1 次预订。
myCalendarThree.book(50, 60); // 返回 1 ,第二个日程安排可以预订并且不存在相交,所以最大 k 次预订是 1 次预订。
myCalendarThree.book(10, 40); // 返回 2 ,第三个日程安排 [10, 40) 与第一个日程安排相交,所以最大 k 次预订是 2 次预订。
myCalendarThree.book(5, 15); // 返回 3 ,剩下的日程安排的最大 k 次预订是 3 次预订。
myCalendarThree.book(5, 10); // 返回 3
myCalendarThree.book(25, 55); // 返回 3
解题思路:
题目要求计算的是,每个新的日程时间表安排后,会产生的最大 k
次预订的值,那么在每次新添加日常后就需要统计当前的最大k次预定的值。使用一个计数器数据结构,开始时间start设置+1,结束时间设置-1,这样在目前的所以会议中,加入新的会议,并且符合交叉的情况的时候,就+1,如果会议结束就-1,由于是时间序列问题,所以需要从大到小排序,并且是每次加入新的安排都要排序。
代码实现:
class MyCalendarThree:def __init__(self):# 定义一个计数器,key是开始时间start和end,value分别是1和-1# 巧妙的是1和-1的设置,这样唯一的日程时间对可以抵消计数为0# 并且这是时间序列问题,所以需要排序,每次加入新的时间对都需要排序self.time = collections.Counter()def book(self, start: int, end: int) -> int:# 1表示会议开始self.time[start] += 1# -1表示会议结束self.time[end] -= 1cur_max = ans = 0# 因为是时间序列问题,所以每次都需要排序for i in sorted(self.time):# 用一个变量记录在当前有效时间里的最大k次预定# 当前会议还没结束又有新的会议在时间上交叉预定时,就会一直是+1状态# 如果当前其中有一个会议结束,那么是-1状态# 所以每次新加入会议安排时,都需要统计cur_max,得出当前的最大k次预定值cur_max += self.time[i]if cur_max > ans:ans = cur_maxreturn ans# Your MyCalendarThree object will be instantiated and called as such:
# obj = MyCalendarThree()
# param_1 = obj.book(start,end)
参考文献:
https://leetcode.cn/problems/my-calendar-iii/solution/wo-de-ri-cheng-an-pai-biao-iii-by-leetcode/
732. 我的日程安排表 III相关推荐
- Python描述 LeetCode 732. 我的日程安排表 III
Python描述 LeetCode 732. 我的日程安排表 III 大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术博文,主要包 ...
- java人员安排表_Java实现 LeetCode 732 我的日程安排表 III(暴力 || 二叉树)
732. 我的日程安排表 III 实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排. MyCalendar 有一个 book(int start, int end)方法 ...
- [LeetCode]732. 我的日程安排表 III
题目 732. 我的日程安排表 III 732. 我的日程安排表 III 当 k 个日程安排有一些时间上的交叉时(例如 k 个日程安排都在同一时间内),就会产生 k 次预订.给你一些日程安排 [sta ...
- 【宫水三叶的刷题日记】732. 我的日程安排表 III
题目描述 这是 LeetCode 上的 「732. 我的日程安排表 III」 ,难度为 「困难」. Tag : 「线段树(动态开点)」.「分块」.「线段树」 当 个日程安排有一些时间上的交叉时(例如 ...
- LeetCode 732. 我的日程安排表 III
732. 我的日程安排表 III [离散化的差分数组] class MyCalendarThree {// 离散差分数组 1:37Map<Integer, Integer> map = n ...
- LeetCode 732. 我的日程安排表 III(差分思想)
文章目录 1. 题目 2. 解题 1. 题目 实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排. MyCalendar 有一个 book(int start, int ...
- 【LeetCode】732. 我的日程安排表 III
传送门:https://leetcode-cn.com/problems/my-calendar-iii/ 一.题目描述 实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安 ...
- 【JAVA】【刷题子】732. 我的日程安排表
愿高三学子们都高考顺利,金榜题名,旗开得胜,考上理想大学! 一.题目与题目分析 题目 当 k 个日程安排有一些时间上的交叉时(例如 k 个日程安排都在同一时间内),就会产生 k 次预订. 给你一些日程 ...
- [Swift]LeetCode732. 我的日程安排表 III | My Calendar III
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
最新文章
- 使用Kubernetes和Docker进行简单的leader选举
- 应用案例:SequoiaDB+Spark搭建医院临床知识库系统
- 利用HTML中的XML数据岛记录浏览
- 派单o2o全开源版 v11.6.0 全新UI版 修复短信问题 小程序模块
- 数据预处理与数据分类预测
- 面试问php学得怎么样,php面试常问的问题及回答
- 交通监控系统服务器配置,监控系统服务器的配置
- js基础知识学习(二)
- Python爬虫安居客房价信息(并利用百度地图API查询坐标)
- ASP.NET 2.0 中的SqlCacheDependency特性
- Oracle 在SQL语句中如何获取系统当前时间并进行操作
- 堆排序算法(图解详细流程)
- [1] UI原型设计工具Pencil Project 学习系列----- 为什么选择
- 各行业的龙头股 (整理)
- c语言rgb数值颜色渐变算法,颜色渐变算法
- 河南省申请测绘资质保密人员要求
- IIS 部署php程序
- fatal error LNK1169: one or more multiply defined symbols found解决方法
- CodeChef 遇到 Language Rejected 怎么办
- IDEA中项目集成git提交代码详细步骤