1. 问题描述:

当 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

提示:

0 <= start < end <= 10 ^ 9
每个测试用例,调用 book 函数最多不超过 400次
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/my-calendar-iii

2. 思路分析:

分析题目可以知道这道题目类似于力扣的699题,因为涉及到区间修改与区间查询操作,所以可以使用带有懒标记的线段树进行求解(区间所有元素整体加1),但是带有懒标记的线段树比较复杂而且耗时比较大(c++不容易超时但是java等语言很容易超时),因为涉及到区间整体加1(差分可以解决区间整体加上某个数的题目)所以我们可以借助于差分的思想,每一次添加一个区间的时候可以使用一个数据结构来维护区间的左端点加1,右端点减1,因为在插入区间的时候需要维护区间的有序性,c++可以使用map来维护,python可以使用sortedcontainers.SortedDict()来维护,这样我们在插入元素的时候就可以维护插入当前区间之后还是有序的。

3. 代码如下:

python(使用排序容器SortedDict来维持插入的元素是有序的):

import sortedcontainersclass MyCalendarThree:def __init__(self):# 维护插入的区间是有序的self.S = sortedcontainers.SortedDict()  # 差分def book(self, start: int, end: int) -> int:if start not in self.S:self.S[start] = 0self.S[start] += 1if end not in self.S:self.S[end] = 0self.S[end] -= 1res = 0s = 0for k, v in self.S.items():s += vres = max(res, s)return res

732 我的日程安排表 III(差分思想)相关推荐

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

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

  2. LeetCode 732. 我的日程安排表 III

    732. 我的日程安排表 III [离散化的差分数组] class MyCalendarThree {// 离散差分数组 1:37Map<Integer, Integer> map = n ...

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

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

  4. java人员安排表_Java实现 LeetCode 732 我的日程安排表 III(暴力 || 二叉树)

    732. 我的日程安排表 III 实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排. MyCalendar 有一个 book(int start, int end)方法 ...

  5. [LeetCode]732. 我的日程安排表 III

    题目 732. 我的日程安排表 III 732. 我的日程安排表 III 当 k 个日程安排有一些时间上的交叉时(例如 k 个日程安排都在同一时间内),就会产生 k 次预订.给你一些日程安排 [sta ...

  6. 【宫水三叶的刷题日记】732. 我的日程安排表 III

    题目描述 这是 LeetCode 上的 「732. 我的日程安排表 III」 ,难度为 「困难」. Tag : 「线段树(动态开点)」.「分块」.「线段树」 当 个日程安排有一些时间上的交叉时(例如 ...

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

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

  8. 【LeetCode】732. 我的日程安排表 III

    传送门:https://leetcode-cn.com/problems/my-calendar-iii/ 一.题目描述 实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安 ...

  9. LeetCode 1674. 使数组互补的最少操作次数(差分思想)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit . 每一次操作,你可以将 nums 中的任何整数替换为 1 到 limit 之间的 ...

  10. LeetCode 995. K 连续位的最小翻转次数(差分思想)

    文章目录 1. 题目 2. 解题 1. 题目 在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 ...

最新文章

  1. 三种复位方式: 同步复位、异步复位、异步复位同步释放
  2. oracle中treat函数,Oracle 函数概览
  3. javascript学习总结1
  4. protel PCB布线精华文章
  5. 多路归并排序_字节跳动面试:5 亿整数的大文件,如何排序 ?
  6. neo4j 增 create
  7. php redis decr_Redis在PHP项目中的实际应用场景
  8. rocketmq存储消息mysql_消息中间件—RocketMQ消息存储(一)
  9. 教育网系统服务器域名地址,中国教育网DNS IP地址大全(32个省)
  10. 计算机动画的教育应用研究,计算机动画技术在高校CAI课件制作中的应用研究
  11. php执行postgresql中的函数,4.3. 调用函数 - [ PostgreSQL 手册 ] - 在线原生手册 - php中文网...
  12. Win10 最下面的任务栏不显示正在打开的窗口了,打开任何东西任务栏都不显示
  13. FTP服务器 虚拟用户 530 Login incorrect. Login failed 解决办法
  14. 六大重要策略与技巧,让我们更有效在领英(LinkedIn)开展线上营销
  15. 绿色明珠--野三坡白草畔
  16. 插入排序(InsertingSort)
  17. 老男孩python全栈第9期
  18. 什么是PCB抄板?主要抄板软件有哪些?
  19. R语言中dcast 和 melt的使用 简单易懂
  20. 桌面云服务器联想,联想云桌面系统助力四川大学搭建智慧课堂

热门文章

  1. 网页设计配色: 色彩的调和
  2. win10计算机升级系统,win10系统升级更新方法
  3. 数据迁移方案-云迁移
  4. 一个程序员自媒体人的2017年终总结
  5. 操作系统实验 连续内存分配 首次适应(FF)算法
  6. android bugly 错误分析,# app 3.6.1 Bugly中崩溃分析
  7. cypress4.10.0及关联软件下载
  8. 卡内基梅隆大学计算机专业录取难,卡内基梅隆大学申请难度分析
  9. 有人问你后端面试考哪些?把这篇扔给他!
  10. 【渗透测试基础-4】资产收集之nmap扫描