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;
        }
    }
    
  • 相关阅读:
    字符串类型
    数据类型之整型
    数据类型
    两个版本的区别
    变量
    DHCP
    MySQL数据库编译及入门
    NFS网络文件系统
    Rsync 数据同步
    互联网数据分享平台
  • 原文地址:https://www.cnblogs.com/wemo/p/10432266.html
Copyright © 2011-2022 走看看