栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

Java&C++题解与拓展——leetcode732.我的日程安排表III【线段树待撕】

Java 更新时间:发布时间: 百科书网 趣学号
每日一题做题记录,参考官方和三叶的题解

目录
  • 题目要求
  • 思路一:差分数组
    • Java
    • C++
  • 思路二:线段树【先放放,单独学完回来尝试自己套】
    • Java
    • C++
  • 总结

题目要求

思路一:差分数组
  • 一个比较简答粗暴的想法,用一个差分数组记录当前日程,在日程开始时间自增一,结束时间自减一。
Java
class MyCalendarThree {
    private TreeMap cnt;
    public MyCalendarThree() {
        cnt = new TreeMap();
    }
    
    public int book(int start, int end) {
        int res = 0;
        int maxBook = 0;
        cnt.put(start, cnt.getOrDefault(start, 0) + 1);
        cnt.put(end, cnt.getOrDefault(end, 0) - 1);
        for(Map.Entry entry : cnt.entrySet()) {
            int freq = entry.getValue();
            maxBook += freq;
            res = Math.max(maxBook, res);
        }
        return res;
    }
}
  • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度: O ( n ) O(n) O(n)
C++
class MyCalendarThree {
    map cnt;
public:
    MyCalendarThree() {}
    
    int book(int start, int end) {
        int res = 0;
        int maxBook = 0;
        cnt[start]++;
        cnt[end]--;
        for(auto &[_, freq] : cnt) {
            maxBook += freq;
            res = max(maxBook, res);
        }
        return res;
    }
};
  • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度: O ( n ) O(n) O(n)
思路二:线段树【先放放,单独学完回来尝试自己套】 Java
 
  • 时间复杂度: O ( log ⁡ n ) O(log n) O(logn)
  • 空间复杂度: O ( m log ⁡ n ) O(mlog n) O(mlogn)
C++
 
  • 时间复杂度: O ( log ⁡ n ) O(log n) O(logn)
  • 空间复杂度: O ( m log ⁡ n ) O(mlog n) O(mlogn)
总结

看到这区间就意识到了事情的不对,果然是老朋友线段树了。来拔个flag,搞搞线段树。


欢迎指正与讨论!
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/957056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号