一.直接遍历比较简单,主要是找到时间段是不是可以预定的时间,即对于集合中已有的元素(有没有元素都一样)进行遍历比较,任意拿到一个集合元素时[left, right) 与 [start, end)需要一个预定条件 ==> left >= end || start >= right 那么可知条件非为 ==> left < end && start < right, 此时产生交集,不可加入其中,返回false。

class MyCalendar {List<int[]> booked;public MyCalendar() {booked = new ArrayList<int[]>(); }public boolean book(int start, int end) {for(int[] arr : booked){int left = arr[0], right = arr[1];if (left < end && start < right){return false;}}booked.add(new int[]{start, end});return true;}
}/*** Your MyCalendar object will be instantiated and called as such:* MyCalendar obj = new MyCalendar();* boolean param_1 = obj.book(start,end);*/

二.二分查找,首先通过重写比较器,指定大小规则,即按照集合元素数组第一个元素大小进行比较升序。此时寻找大于或者等于end的元素[left1, right1)和前一个集合[left2, right2),那么条件为right2 <= start < end <= left1,可以预定 ==> 当找到比end大或者等于的元素时,看前一个元素的right2是否比start小,满足就可以预定,其他情况同理,代码中举了两个例子,希望可以帮助您的理解。

class MyCalendar {TreeSet<int[]> booked;public MyCalendar() {// 比较器重写 按集合数组第一个元素大小进行升序booked = new TreeSet<int[]>((o1, o2) -> o1[0] - o2[0]); }public boolean book(int start, int end) {// 集合为空,直接预订if (booked.isEmpty()){booked.add(new int[]{start, end});return true;}// 假设集合中已有[[10, 20]] ,现存储[15, 27];// 假设集合中已有[[10, 20]], 现存储[5, 10];// 大于等于end的第一个区间为[l1,r1),前一个区间[l2,r2);预定条件:r2 <= start < end <= l1// 临时数组,存储当前end时间// temp = [15, 0]// temp = [5, 0]int[] temp = {end, 0};// ceiling(E e)返回此集中大于或等于(以重写的比较器比较)给定元素的最小元素,或者如果没有此类元素。null// 获取l1// arr = null (15 > 10 没有比给定元素大于等于的元素)// arr = [10, 20] (5 < 10 存在比给定元素大于等于的元素)int[] arr = booked.ceiling(temp);// last()返回此集中当前的最后一个(最高)元素。// lower(E e)返回此集中严格小于给定元素的最大元素,或者如果没有此类元素。null// 获取r2 ,prev存在两种情况:集合中元素没有比end大 ==> 获取当前最大元素数组;存在比end大的元素 ==> 获取前一个元素数组// arr 为空, prev = [10, 20];// arr不为空, prev = null// int[] prev = arr == null ? booked.last() : booked.lower(arr);// first()返回此集中当前第一个(最低)元素。// arr 与 [10, 20]不匹配 false || [10, 20]中20 > 15 false ==> false// arr 与 [10, 20]匹配 true ==> true加入集合if (arr == booked.first() || booked.lower(temp)[1] <= start){booked.add(new int[]{start, end});return true;}return false;}
}/*** Your MyCalendar object will be instantiated and called as such:* MyCalendar obj = new MyCalendar();* boolean param_1 = obj.book(start,end);*/

我的日程安排表(理解代码)学习记录Java相关推荐

  1. DAB-Deformable-DETR代码学习记录之模型构建

    DAB-DETR的作者在Deformable-DETR基础上,将DAB-DETR的思想融入到了Deformable-DETR中,取得了不错的成绩.今天博主通过源码来学习下DAB-Deformable- ...

  2. ECCV2022细粒度图像检索SEMICON代码学习记录

    代码链接:GitHub - aassxun/SEMICON 环境配置 # 创建&激活虚拟环境 conda create -n semicon python==3.8.5 conda activ ...

  3. 【学习记录-java】Java基础学习笔记

    学习Java的一些笔记 前言 java中字符串的比较 Stream 流之 sorted 运算符 Java包(package)的命名规范&规则 SWITCH CASE java中import作用 ...

  4. java分页代码思路,记录--java 分页 思路 (hibernate关键代码)

    有时会脑袋蒙圈,记录下分页的思路 下面代码是hibernate的分页,其分页就是从第几条数据为起点,取几条数据.比如在mysql中的limit(5,10)取的就是第6条到第10条 在下面代码中的pag ...

  5. 深入理解MySQL学习记录

    SQL优化 定位慢SQL 两种解决方案: 1. 查看慢查询日志确定已经执行完的慢查询 2. show processlist查看正在执行的慢查询 慢查询日志 Mysql的慢查询日志用来记录在Mysql ...

  6. 【LVI-SAM代码学习记录】

    文章目录 目录 文章目录 前言 一.思路 二.LIO部分代码阅读 1.imagaProjection() 2.featureTracker() 3.imuPreintegration() 4.mapO ...

  7. 学习记录 java泛型资料

    java泛型资料: 1. 概述 在引入范型之前,Java类型分为原始类型.复杂类型,其中复杂类型分为数组和类.引入范型后,一个复杂类型 就可以在细分成更多的类型. 例如原先的类型List,现在在细分成 ...

  8. Java学习记录 Java与JSON

    什么是JSON? JSON英文全称是 JavaScript Object Notation (JS对象简谱). JSON是一种使用了JS对象的书写语法的格式.[引用1] 它基于 ECMAScript ...

  9. 深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录

    自己的研究方向是心脏AI相关(心脏MRI+深度学习这样子),最近在学习医学图像分割--自动心脏诊断挑战赛(ACDC)的代码: GitHub - baumgach/acdc_segmenter: Pub ...

  10. OTFS代码学习记录Ⅰ

    该代码是Monash University的几位老师开源的(Raviteja Patchava, Yi Hong, and Emanuele Viterbo)首先感谢一下^_^ 接下来就开始我们的代码 ...

最新文章

  1. 将数据库表中数据转为XML
  2. java 图形立即显示_java 图形显示
  3. 为什么装了ACDSEE 就不能点网站上的连接?
  4. python全栈开发内容_Python全栈开发之Day02
  5. 转载:ImportError: No module named ‘httplib‘
  6. 二叉查找树之 Java的实现
  7. java窗口设计_java简单窗口设计(源代码)
  8. python3实现softmax + 函数曲线绘制
  9. vue3.0组件之父传子,子传父,父传孙
  10. 免费的在线3D CAD【BimAnt】
  11. 国家开发银行软件测试工资待遇,国家开发银行总行工资待遇
  12. Vivado_IDE(1)熟悉环境
  13. 如何压缩照片到30kb以下?三个方法
  14. photoshopcs6安装包
  15. DirectX SDK各版本下载地址备份
  16. 让IE部分网站或IP进行代理访问
  17. android activity 后的形式 藏
  18. 快速使用CSS 弹性盒子
  19. 上海初中计算机课程大纲,《上海市普通中小学校教育装备配备指南(试行稿)》解读...
  20. 为什么使用聚乙烯醇胶水消泡剂

热门文章

  1. 【干货】PS 如何快速抠图示例
  2. bugku misc QAQ
  3. 苹果开发者账号申请流程
  4. 使用ImageIO压缩图片
  5. 北理工计算机学院奖学金公示,计算机学院2020年研究生国家奖学金拟推荐人选公示通知...
  6. 第三方支付架构设计之:自有账户支付(六)
  7. 深入探访支付宝双11十年路,技术凿穿焦虑与想象极限 | CYZONE特写
  8. 卡耐基梅隆大学计算机熬夜,卡耐基梅隆大学:作为一所CS牛校,我也很无奈啊...
  9. 如何清理C盘空间垃圾?一键清理系统垃圾保障Windows快速运行
  10. 无缝拼接文件 copy/b 使用