zoukankan      html  css  js  c++  java
  • My Calendar III

    题目

    实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排。

    MyCalendar 有一个 book(int start, int end) 方法。它意味着在start到end时间内增加一个日程安排,注意,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < end。

    当 K 个日程安排有一些时间上的交叉时(例如K个日程安排都在同一时间内),就会产生 K 次预订。

    每次调用 MyCalendar.book方法时,返回一个整数 K ,表示最大的 K 次预订。

    请按照以下步骤调用MyCalendar 类: MyCalendar cal = new MyCalendar(); MyCalendar.book(start, end)

    题目大意

    记录一组活动区间,求区间的最大重叠次数

    例子:

    MyCalendarThree(); 
    MyCalendarThree.book(10, 20); // returns 1
    MyCalendarThree.book(50, 60); // returns 1
    MyCalendarThree.book(10, 40); // returns 2
    MyCalendarThree.book(5, 15); // returns 3
    MyCalendarThree.book(5, 10); // returns 3
    MyCalendarThree.book(25, 55); // returns 3
    

    大致思路

    TreeMap红黑树

    利用TreeMap记录时间端点的次数,起点计数+1,终点计数-1。

    每增加一个活动,遍历TreeMap并累加,累计值的最大值即为当前的最大重叠活动次数。

    代码

    class MyCalendarThree {
    
        private Map<Integer, Integer> dmap;
        public MyCalendarThree() {
            dmap = new TreeMap<>();
        }
        
        public int book(int start, int end) {
            int cnt = 0, ans = 0;
            dmap.put(start, dmap.getOrDefault(start, 0) + 1);
            dmap.put(end, dmap.getOrDefault(end, 0) - 1);
            for (int key : dmap.keySet()) {
                cnt += dmap.get(key);
                ans = Math.max(ans, cnt);
            }
            return ans;
        }
    }
    
  • 相关阅读:
    2018-8-10-win10-uwp-读取保存WriteableBitmap-、BitmapImage
    2018-8-10-win10-uwp-读取保存WriteableBitmap-、BitmapImage
    字节流与字符流的区别详解
    Java线程之 InterruptedException 异常
    java 线程的几种状态
    C++中 引用&与取地址&的区别
    百度富文本编辑器ueditor在jsp中的使用(ssm框架中的应用)
    CodeForces
    CodeForces
    训练记录
  • 原文地址:https://www.cnblogs.com/wemo/p/10432266.html
Copyright © 2011-2022 走看看