当前位置:网站首页>LeetCode 731. 我的日程安排表 II
LeetCode 731. 我的日程安排表 II
2022-07-06 06:02:00 【Sasakihaise_】

【区间拆分与合并】想复杂了,把双次重叠区间给拆分开了,如果进行区间拆分的话要考虑端点相同的情况。
class MyCalendarTwo {
// 双有序集合拆分与合并 1:27 2:47
TreeMap<Integer, Integer> m1 = new TreeMap();
TreeMap<Integer, Integer> m2 = new TreeMap();
public MyCalendarTwo() {
}
public boolean book(int start, int end) {
Integer k2 = m2.lowerKey(end);
if (k2 != null) {
if (m2.get(k2) > start) {
return false;
}
}
Integer key = m1.lowerKey(end);
if (key == null) {
m1.put(start, end);
return true;
}
int value = m1.get(key);
if (value <= start) {
m1.put(start, end);
return true;
}
while (key != null) {
if (m1.get(key) > start) {
value = m1.get(key);
// key start value end 重叠是:max(key, start) min(value, end)
// 左是 min(key, start) max(key, start) 右是 min(value, end) max(value, end)
int l1 = Math.min(key, start);
int e1 = Math.max(key, start);
int l2 = Math.min(value, end);
int e2 = Math.max(value, end);
m2.put(e1, l2);
m1.remove(key);
if (l2 != e2) {
m1.put(l2, e2);
}
if (l1 != e1) {
start = l1;
end = e1;
key = m1.lowerKey(end);
if (key == null) {
m1.put(start, end);
return true;
}
} else {
break;
}
} else {
m1.put(start, end);
break;
}
}
return true;
}
}
/**
* Your MyCalendarTwo object will be instantiated and called as such:
* MyCalendarTwo obj = new MyCalendarTwo();
* boolean param_1 = obj.book(start,end);
*/【优化】其实一重区间和二重区间有重叠也是没关系的,因为首先就会去二重区间判断。
class MyCalendarTwo {
// 双TreeMap 2:55
TreeMap<Integer, Integer> m1 = new TreeMap();
TreeMap<Integer, Integer> m2 = new TreeMap();
public MyCalendarTwo() {
}
public boolean book(int start, int end) {
Integer k2 = m2.lowerKey(end);
if (k2 != null && m2.get(k2) > start) {
return false;
}
Integer key = m1.lowerKey(end);
while (key != null) {
int value = m1.get(key);
if (value <= start) {
break;
}
m1.remove(key);
m2.put(Math.max(start, key), Math.min(end, value));
start = Math.min(start, key);
end = Math.max(end, value);
key = m1.lowerKey(end);
}
m1.put(start, end);
return true;
}
}
/**
* Your MyCalendarTwo object will be instantiated and called as such:
* MyCalendarTwo obj = new MyCalendarTwo();
* boolean param_1 = obj.book(start,end);
*/
边栏推荐
- Hongliao Technology: how to quickly improve Tiktok store
- 功能安全之故障(fault),错误(error),失效(failure)
- The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
- Practice sharing: how to safely and quickly migrate from CentOS to openeuler
- VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator
- 误差的基本知识
- 《卓有成效的管理者》读书笔记
- 如何在业务代码中使用 ThinkPHP5.1 封装的容器内反射方法
- H3C S5820V2_5830V2交换机IRF2堆叠后升级方法
- 公司视频加速播放
猜你喜欢
随机推荐
Implementation of linked list in address book management system
Huawei BFD configuration specification
Eigen sparse matrix operation
【Postman】测试(Tests)脚本编写和断言详解
[C language syntax] the difference between typedef struct and struct
Redistemplate common collection instructions opsforvalue (II)
Cognitive introspection
VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator
Gtest之TEST宏的用法
A complete collection of necessary learning websites for office programmers
LTE CSFB process
如何在业务代码中使用 ThinkPHP5.1 封装的容器内反射方法
授予渔,从0开始搭建一个自己想要的网页
IDEA 新UI使用
Network protocol model
Luogu p1460 [usaco2.1] healthy Holstein cows
假设检验学习笔记
Request forwarding and redirection
What are the test sites for tunnel engineering?
在线问题与离线问题





![[Thesis code] SML part code reading](/img/3c/0deccf499d9b1cbe30a302cb115d73.png)



![[untitled]](/img/5d/028b9d19e9a2b217f40198d4631db2.png)