【Leetcode 每日一题】731. 我的日程安排表 II

news/2025/1/8 0:34:10/

问题背景

实现一个程序来存放你的日程安排。如果要添加的时间内不会导致三重预订时,则可以存储这个新的日程安排。
当三个日程安排有一些时间上的交叉时(例如三个日程安排都在同一时间内),就会产生 三重预订
事件能够用一对整数 s t a r t T i m e startTime startTime e n d T i m e endTime endTime 表示,在一个半开区间的时间 [ s t a r t T i m e , e n d T i m e ) [startTime, endTime) [startTime,endTime) 上预定。实数 x x x 的范围为 s t a r t T i m e ≤ x < e n d T i m e startTime \le x \lt endTime startTimex<endTime
实现 MyCalendarTwo 类:

  • MyCalendarTwo() 初始化日历对象。
  • boolean book(int startTime, int endTime) 如果可以将日程安排成功添加到日历中而不会导致三重预订,返回 t r u e true true。否则,返回 f a l s e false false 并且不要将该日程安排添加到日历中。

数据约束

0 ≤ s t a r t < e n d ≤ 1 0 9 0 \le start \lt end \le 10 ^ 9 0start<end109
● 每个测试用例,调用 book 方法的次数最多不超过 1000 1000 1000

解题过程

在需要统计重叠次数的情况下,昨天 遍历整个哈希表的做法 就不好使了。
可以额外定义一个记录重叠范围的数组,在每次加入新范围时更新,这样下一次与重叠数组的交集部分就会发生题中描述的三重预定的情况。

具体实现

class MyCalendarTwo {List<int[]> ranges;List<int[]> overlaps;public MyCalendarTwo() {ranges = new ArrayList<>();overlaps = new ArrayList<>();}public boolean book(int startTime, int endTime) {for(int[] overlap : overlaps) {if(overlap[0] < endTime && startTime < overlap[1]) {return false;}}for(int[] range : ranges) {if(range[0] < endTime && startTime < range[1]) {overlaps.add(new int[]{Math.max(range[0], startTime), Math.min(range[1], endTime)});}}ranges.add(new int[]{startTime, endTime});return true;}
}/*** Your MyCalendarTwo object will be instantiated and called as such:* MyCalendarTwo obj = new MyCalendarTwo();* boolean param_1 = obj.book(startTime,endTime);*/

http://www.ppmy.cn/news/1561114.html

相关文章

MySQL(五)MySQL图形化工具-Navicat

1. MySQL图形化工具-Navicat Navicat是一套快速、可靠的数据库管理工具&#xff0c;Navicat是以直觉化的图形用户界面而建的&#xff0c;可以兼容多种数据库&#xff0c;支持多种操作系统。   Navicat for MySQL是一款强大的 MySQL 数据库管理和开发工具&#xff0c;它为专业…

微信小程序:封装request请求

1、定义一个request.js类 // utils/request.js const app getApp();function requestWithToken(url, method GET, data {}) {return new Promise((resolve, reject) > {// 发送请求wx.request({url: app.globalData.position url,header: {"Content-Type": &…

在 macOS 上,你可以使用系统自带的 终端(Terminal) 工具,通过 SSH 协议远程连接服务器

文章目录 1. 打开终端2. 使用 SSH 命令连接服务器3. 输入密码4. 连接成功5. 使用密钥登录&#xff08;可选&#xff09;6. 退出 SSH 连接7. 其他常用 SSH 选项8. 常见问题排查问题 1&#xff1a;连接超时问题 2&#xff1a;权限被拒绝&#xff08;Permission denied&#xff09…

项目优化之策略模式

目录 策略模式基本概念 策略模式的应用场景 实际项目中具体应用 项目背景&#xff1a; 策略模式解决方案&#xff1a; 计费模块策略模式简要代码 策略模式基本概念 策略模式(Strategy Pattern) 是一种行为型设计模式&#xff0c;把算法的使用放到环境类中&#xff0c;而算…

婚庆摄影小程序ssm+论文源码调试讲解

第4章 系统设计 4.1 系统设计的原则 在系统设计过程中&#xff0c;也需要遵循相应的设计原则&#xff0c;这些设计原则可以帮助设计者在短时间内设计出符合设计规范的设计方案。设计原则主要有可靠性&#xff0c;安全性&#xff0c;可定制化&#xff0c;可扩展性&#xff0c;可…

【面试】后端开发面试中常见数据结构及应用场景、原理总结

在后端开发面试中&#xff0c;常见的数据结构包括数组、链表、栈、队列、二叉树、平衡树、堆、图和哈希表等。以下是这些数据结构的总结&#xff0c;包括它们的应用场景、优缺点。 常见数据结构及其应用场景 数据结构应用场景数组存储固定大小的数据集合&#xff0c;如学生成…

工作中常用Vim的命令

Hi, 我是你们的老朋友&#xff0c;主要专注于嵌入式软件开发&#xff0c;有兴趣不要忘记点击关注【码思途远】 目录 0. ctags -R 1.认识 Vim的几种工作模式 2.高频使用命令 2.1 修改文件 2.2 关于行号 2.3 删除多行&#xff0c;删除部分 2.4 复制粘贴 2.5 光标移动 2.…

八字算命网站搭建方法:从零开始用php搭建一个命理网

八字算命网站搭建方法&#xff1a;从零开始构建你的命理平台 目录 引言网站需求分析技术选型网站架构设计数据库设计PHP代码实现 8.1 用户注册与登录8.2 八字计算逻辑8.3 算命结果展示 网站优化与SEO总结 1. 引言 随着人们对传统文化的重视&#xff0c;八字算命逐渐受到关注…