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相关推荐

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

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

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

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

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

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

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

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

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

  8. 【JAVA】【刷题子】732. 我的日程安排表

    愿高三学子们都高考顺利,金榜题名,旗开得胜,考上理想大学! 一.题目与题目分析 题目 当 k 个日程安排有一些时间上的交叉时(例如 k 个日程安排都在同一时间内),就会产生 k 次预订. 给你一些日程 ...

  9. [Swift]LeetCode732. 我的日程安排表 III | My Calendar III

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

最新文章

  1. 使用Kubernetes和Docker进行简单的leader选举
  2. 应用案例:SequoiaDB+Spark搭建医院临床知识库系统
  3. 利用HTML中的XML数据岛记录浏览
  4. 派单o2o全开源版 v11.6.0 全新UI版 修复短信问题 小程序模块
  5. 数据预处理与数据分类预测
  6. 面试问php学得怎么样,php面试常问的问题及回答
  7. 交通监控系统服务器配置,监控系统服务器的配置
  8. js基础知识学习(二)
  9. Python爬虫安居客房价信息(并利用百度地图API查询坐标)
  10. ASP.NET 2.0 中的SqlCacheDependency特性
  11. Oracle 在SQL语句中如何获取系统当前时间并进行操作
  12. 堆排序算法(图解详细流程)
  13. [1] UI原型设计工具Pencil Project 学习系列----- 为什么选择
  14. 各行业的龙头股 (整理)
  15. c语言rgb数值颜色渐变算法,颜色渐变算法
  16. 河南省申请测绘资质保密人员要求
  17. IIS 部署php程序
  18. fatal error LNK1169: one or more multiply defined symbols found解决方法
  19. CodeChef 遇到 Language Rejected 怎么办
  20. IDEA中项目集成git提交代码详细步骤

热门文章

  1. 掀起的“元宇宙”热潮,能给我们带来什么?
  2. 高手处理事情的十二个方法,普通人学到三招就很厉害了
  3. 五猴分桃通解公式-敬献给诺贝尔奖获得者李政道博士
  4. 《网安学习之道》预告
  5. 电容笔适用所有平板吗?值得推荐电容笔排行
  6. 听说有人要买雅虎 这家公司还有值得让人花钱的地方吗
  7. 软件研发是高科技吗?
  8. Workflow Engine for .Net Core ENTERPRISE v4.0.10-SEO-狼术
  9. FPAG—计数器—BCD译码器—Verilog
  10. VHDL和Verilog HDL的区别