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

  大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号、CSDN、GitHub、B站等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~

  如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息.


本文原创为【亓官劼】(qí guān jié ),请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 全部文章请关注微信公众号【亓官劼】。

题目

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 <= 109
  • 每个测试用例,调用 book 函数最多不超过 400

解题思路

这里可以采用差分数组的方式,每次更新时只要在start的位置+1,end的位置减一即可。这里由于start和end的范围比较大,无法直接开数组,因此这里使用有序字典进行记录数据。

Python描述

from sortedcontainers import SortedDictclass MyCalendarThree:def __init__(self):self.cnt_dict = SortedDict()def book(self, start: int, end: int) -> int:# 使用差分数组self.cnt_dict[start] = self.cnt_dict.get(start,0) + 1self.cnt_dict[end] = self.cnt_dict.get(end,0) - 1tmp = 0res = 0for item in self.cnt_dict.values():tmp += itemres = max(tmp,res)return res

Python描述 LeetCode 732. 我的日程安排表 III相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. Python描述 LeetCode 1037. 有效的回旋镖

    Python描述 LeetCode 1037. 有效的回旋镖   大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术博文,主要包括前端开 ...

  8. Python描述 LeetCode 334. 递增的三元子序列

    Python描述 LeetCode 334. 递增的三元子序列   大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术博文,主要包括前端 ...

  9. Python描述 LeetCode 875. 爱吃香蕉的珂珂

    Python描述 LeetCode 875. 爱吃香蕉的珂珂   大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术博文,主要包括前端开 ...

最新文章

  1. 限制HTTP数据包发送Referer
  2. sklearn(五)计算acc:使用metrics.accuracy_score()计算分类的准确率
  3. Android native 开发总结
  4. 开源 java CMS - FreeCMS2.3员
  5. Sql 行转列 STUFF
  6. Git Bash中npm配置,加速下载等作用
  7. 更改oracle背景,Oracle 11gR2修改用户后导致系统HANG住
  8. BZOJ4423: [AMPPZ2013]Bytehattan
  9. 用c语言编写图形的变换程序,利用C语言实现二维图形的变换
  10. 全自动与半自动手表的区别_半自动和全自动的区别在哪里?
  11. ubuntu 16.04 安装ftp服务
  12. 纤亿通教你如何选择合适的 Cat6 网线
  13. 珠海市世鸿置业有限公司5周年线下交流会带你学会用基金理财
  14. Linux系统中sit0是做什么的
  15. 如何用PS的样式制作图片椭圆形边框
  16. 雷柏V500机械键盘——重复按键故障原因之一
  17. LittleVGL(LVGL)学习笔记——PC 模拟器的安装和使用(CodeBlocks)
  18. Delphi中的编译期函数Dec,Inc,Odd,Pred,Succ,Ord,Chr,Low,High,Sizeof【转】
  19. FOTA与 SOTA介绍
  20. 云南林业计算机单招试题,2021年云南林业职业技术学院单招数学考试模拟试题库...

热门文章

  1. IDEA常用快捷键和谷歌浏览器快捷键Mac版
  2. html常用标签及属性,常用英语单词
  3. 应广单片机PMC150/PMS150
  4. 【花一周,打造属于自己的一台DIY3D打印机1.0】
  5. 天拓分享|西门子plc常见接口及通讯协议有哪些?
  6. 菜鸟硬件学习笔记(一)
  7. 【深度学习:21 天实战 Caffe】课后习题参考答案
  8. 找个搞IOS逆向的大佬写个越狱插件,接单的联系,APP没加密,有可参照,有接单的大佬请联系下
  9. 基于android的地图毕业设计,基于android百度地图应用系统_毕业设计.docx
  10. 2021,一起庖丁解“黄牛”