豆包 LeetCode 732.我的日程安排表 III class MyCalendarThree Java实现
这是 LeetCode 732. My Calendar III 的标准 Java 最优解,用**差分数组(TreeMap)**实现,时间复杂度优秀、代码简洁。需要我给你写线段树(动态开点)版本吗?那个是 O(log MAX) 每次,效率更高,适合大数据量。
·
这是 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) 每次,效率更高,适合大数据量。
更多推荐




所有评论(0)