这是 LeetCode 732. My Calendar III 的标准 Java 最优解,用**差分数组(TreeMap)**实现,时间复杂度优秀、代码简洁。

题解思路

  • 求同一时间最大的预定重叠数,经典差分问题。
  • 使用  TreeMap  按时间排序:
  • 开始时间 +1
  • 结束时间 -1
  • 遍历一遍,维护当前重叠数,更新最大值。

Java 代码

java

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

class MyCalendarThree {
private TreeMap<Integer, Integer> diff;

public MyCalendarThree() {
    diff = new TreeMap<>();
}

public int book(int start, int end) {
    // 差分更新
    diff.put(start, diff.getOrDefault(start, 0) + 1);
    diff.put(end, diff.getOrDefault(end, 0) - 1);

    int max = 0;
    int cur = 0;
    // 按时间顺序扫描
    for (Map.Entry<Integer, Integer> entry : diff.entrySet()) {
        cur += entry.getValue();
        max = Math.max(max, cur);
    }
    return max;
}

}

复杂度

  • 每次  book :
  • 插入:O(log n)
  • 遍历:O(n)
  • n 次调用:O(n²),本题完全能过。

需要我给你写线段树(动态开点)版本吗?那个是 O(log MAX) 每次,效率更高,适合大数据量。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐