力扣:732. 我的日程安排表 III

这是一个使用Java编写的日历预订系统,包含两个类`MyCalendarThree`和`MyCalendarThree2`。`MyCalendarThree`使用TreeMap来管理预订,`book`方法会更新预订并返回当前最大连续预订数。`MyCalendarThree2`类则引入了懒惰更新的概念,使用HashMap和lazy变量来存储树结构,并实现了`book`和`update`方法进行预订和更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



import org.omg.PortableInterceptor.INACTIVE;

import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

/**
 * @author xnl
 * @Description:
 * @date: 2022/6/6   21:08
 */
public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();

    }


}

class MyCalendarThree {
    Map<Integer, Integer> map;
    public MyCalendarThree() {
        map = new TreeMap<>();
    }

    public int book(int start, int end) {
        int ans = 0;
        int maxBook = 0;
        map.put(start, map.getOrDefault(start, 0) + 1);
        map.put(end, map.getOrDefault(end, 0) - 1);
        for (Map.Entry<Integer, Integer> integerIntegerEntry : map.entrySet()) {
            Integer value = integerIntegerEntry.getValue();
            maxBook += value;
            ans = Math.max(maxBook, ans);
        }
        return ans;
    }
}

class MyCalendarThree2 {
    Map<Integer, Integer> tree;
    Map<Integer, Integer> lazy;
    public MyCalendarThree2() {
        tree = new HashMap<Integer, Integer>(16);
        lazy = new HashMap<Integer, Integer>(16);
    }

    public int book(int start, int end) {

        return tree.getOrDefault(1, 0);
    }

    public void update(int start, int end, int l, int r, int idx) {
        // 退出条件
        if (r < start || l > end ){
            return;
        }

        // 初始化
        if (start <= 1 && r <= end){
            tree.put(idx, tree.getOrDefault(idx, 0) + 1);
            lazy.put(idx, lazy.getOrDefault(idx, 0) + 1);
        }else {
            int mid = (l + r) >> 1;
            update(start, end, l, mid, idx * 2);
            update(start, end, mid + 1, r, idx * 2 + 1);
            tree.put(idx, lazy.getOrDefault(idx, 0) + Math.max(tree.getOrDefault(idx * 2
            , 0), tree.getOrDefault(idx * 2 + 1, 0)));
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值