当前位置: 首页 > article >正文

【Leetcode 每日一题】732. 我的日程安排表 III

问题背景

k k k 个日程存在一些非空交集时(即, k k k 个日程包含了一些相同时间),就会产生 k k k 次预订。
给你一些日程安排 [ s t a r t T i m e , e n d T i m e ) [startTime, endTime) [startTime,endTime),请你在每个日程安排添加后,返回一个整数 k k k,表示所有先前日程安排会产生的最大 k k k 次预订。
实现一个 MyCalendarThree 类来存放你的日程安排,你可以一直添加新的日程安排。

  • MyCalendarThree() 初始化对象。
  • int book(int startTime, int endTime) 返回一个整数 k k k,表示日历中存在的 k k k 次预订的最大值。

数据约束

  • 0 ≤ s t a r t T i m e < e n d T i m e ≤ 1 0 9 0 \le startTime \lt endTime \le 10 ^ 9 0startTime<endTime109
  • 每个测试用例,调用 book 函数最多不超过 400 400 400

解题过程

一维差搭配前缀和,能够快速地得到一个范围内每个数组都进行加减操作的结果。
由于这题数据量比较大,需要用有序映射作为哈希表来模拟数组。这样在遍历集合的过程中,可以方便地得到每个时间点出现的次数。
需要注意的是,一般情况下一维差分是在右端点的后一个位置进行取消操作,但是本题中所给的区间左闭右开,不需要修正。

具体实现

class MyCalendarThree {
    // TreeMap 会根据键的大小维护元素的顺序
    private static final TreeMap<Integer, Integer> map = new TreeMap<>();

    public MyCalendarThree() {
        map.clear();
    }
    
    public int book(int startTime, int endTime) {
        // 构造差分数组
        map.merge(startTime, 1, Integer::sum);
        map.merge(endTime, -1, Integer::sum);
        // times 可以看作前缀和,遍历到某个位置上,就是它出现的总次数
        int res = 0, times = 0;
        for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
            times += entry.getValue();
            res = Math.max(res, times);
        }
        return res;
    }
}

/**
 * Your MyCalendarThree object will be instantiated and called as such:
 * MyCalendarThree obj = new MyCalendarThree();
 * int param_1 = obj.book(startTime,endTime);
 */

http://www.kler.cn/a/467884.html

相关文章:

  • vue3组件化开发优势劣势分析,及一个案例
  • 条件期望窥探
  • 实现AVL树
  • 【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现
  • 使用 Optimum Habana 在 Intel Gaudi 上加速模型训练与推理
  • Echart实现3D饼图示例
  • 【阅读笔记】基于FPGA的红外图像二阶牛顿插值算法的实现
  • CSS——1.优缺点
  • 权限管理的方法
  • 微信小程序页面传参传对象
  • 特种作业操作证考试题库及答案(登高架设作业)
  • 功能篇:vue中的vuex使用例子
  • windows11(或centos7)安装nvidia显卡驱动、CUDA、cuDNN
  • Lucas-Kanade光流法详解
  • vue路由模式面试题
  • ffmpeg filter 滤镜命令
  • yolo目标检测之摄像头检测
  • vulkan从小白到专家——VulkanSwapChain
  • 《Rust权威指南》学习笔记(一)
  • Linux一些问题
  • Android 系统 `android.app.Application` 类的深度定制
  • Jellyfin播放卡顿,占CPU的解决方法
  • 数学常用术语作用reminder
  • 供应链系统设计-供应链中台系统设计(七)- 商品中心设计篇
  • 大白话拆解——多线程中关于死锁的一切(七)(已完结)
  • SpringBoot中常用的 Redis 命令实现