文章目录

  • 1. 题目
  • 2. 解题

1. 题目

实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排。

MyCalendar 有一个 book(int start, int end)方法。它意味着在start到end时间内增加一个日程安排,注意,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < end

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

每次调用 MyCalendar.book方法时,返回一个整数 K ,表示最大的 K 次预订

请按照以下步骤调用MyCalendar 类: MyCalendar cal = new MyCalendar(); MyCalendar.book(start, end)

示例 1:
MyCalendarThree();
MyCalendarThree.book(10, 20); // returns 1
MyCalendarThree.book(50, 60); // returns 1
MyCalendarThree.book(10, 40); // returns 2
MyCalendarThree.book(5, 15); // returns 3
MyCalendarThree.book(5, 10); // returns 3
MyCalendarThree.book(25, 55); // returns 3
解释:
前两个日程安排可以预订并且不相交,所以最大的K次预订是1。
第三个日程安排[10,40]与第一个日程安排相交,最高的K次预订为2。
其余的日程安排的最高K次预订仅为3。
请注意,最后一次日程安排可能会导致局部最高K次预订为2,但答案仍然是3,
原因是从开始到最后,时间[10,20],[10,40]和[5,15]仍然会导致3次预订。说明:
每个测试用例,调用 MyCalendar.book 函数最多不超过 400次。
调用函数 MyCalendar.book(start, end)时,
start 和 end 的取值范围为 [0, 10^9]

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/my-calendar-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:
LeetCode 729. 我的日程安排表 I(set 二分查找)
LeetCode 731. 我的日程安排表 II(set二分查找 / 差分思想)

  • 本题更好的解法是线段树(写不来)
  • 用差分思想做
class MyCalendarThree {map<int,int> m;
public:MyCalendarThree() {}int book(int start, int end) {m[start]++;//差分思想m[end]--;int count = 0, maxCount = 0;for(auto it = m.begin(); it != m.end(); ++it){count += it->second;maxCount = max(maxCount, count);}return maxCount;}
};

364 ms 24.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

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

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

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

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

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

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

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

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

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

  5. LeetCode 1109. 航班预订统计(差分思想)

    1. 题目 这里有 n 个航班,它们分别从 1 到 n 进行编号. 我们这儿有一份航班预订表,表中第 i 条预订记录 bookings[i] = [i, j, k] 意味着我们在从 i 到 j 的每个 ...

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

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

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

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

  8. LeetCode 1943. 描述绘画结果(差分思想)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个细长的画,用数轴表示. 这幅画由若干有重叠的线段表示,每个线段有 独一无二 的颜色. 给你二维整数数组 segments ,其中 segments ...

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

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

最新文章

  1. 使用VMware Workstation搭建基于Linux的Oracle 10g RAC
  2. 奥特linux系统监控,奥特曼知识大挑战答案
  3. 关于js中的时间处理
  4. RS232、RS485、TTL电平、CMOS电平
  5. GT_HEADERGUID_LIST
  6. springboot创建parent_理解spring-boot-starter-parent
  7. 日志打印出来的对象都是XXX@39ddf169这样的,怎么办?
  8. RabbitMQ学习笔记-RabbitMQ的运转流程
  9. spark操作redis_Spark对接Redis快速入门
  10. 数据结构与算法(转)
  11. Ant tutorial(2)
  12. 计算机网络中数据包的分布,计算机网络习题.doc
  13. 机器学习(Machine Learning)与深度学习(Deep Learning)资料汇总
  14. Android10相机能够到获取经纬度,但是不能在相机中显示
  15. 阿里云CDN介绍以及如何配合OSS使用
  16. Substrate源码分析:启动流程
  17. android仿微博头像_仿微博点击头像加载动画
  18. 自动与Internet时间服务器同步
  19. 【亲测 | 004】趣味测试小程序源码各种测试(趣味测试、爱情测试、缘分测试、性格测试) | 极致技术工厂
  20. linux进pe读不到硬盘,进入PE后不显示硬盘的解决办法

热门文章

  1. python 人脸关键点检测_opencv+python+dlib人脸关键点检测、实时检测
  2. np.random.seed(0)作用
  3. Hive安装报错:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient的解决办法
  4. FreeRTOS学习笔记——互斥型信号量
  5. 前端radio单选框默认选中_「radio选中」单选框radio总结(获取值、设置默认选中值、样式) - seo实验室...
  6. Android找工作系列之自定义View
  7. Hbase Rowkey设计原则
  8. Tomcat 在mac上(Idea)端口冲突解决办法
  9. http://www.cnblogs.com/langjt/p/4281477.html
  10. JQUERY解析XML IE8的兼容问题