当前位置:网站首页>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);
*/
边栏推荐
- Commodity price visualization
- The usage and difference between strlen and sizeof
- [Baiwen smart home] first day of the course_ Learn Embedded and understand the development mode of bare metal and RTOS
- Fault, error, failure of functional safety
- wib3.0 跨越,在跨越(ง •̀_•́)ง
- HCIA review
- Software test interview questions - Test Type
- Testing and debugging of multithreaded applications
- Cognitive introspection
- Application du Groupe Li dans gtsam
猜你喜欢
华为路由器如何配置静态路由
SQLMAP使用教程(三)实战技巧二
VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator
properties文件
LAN communication process in the same network segment
Application du Groupe Li dans gtsam
Is it difficult for an information system project manager?
【论文代码】SML部分代码阅读
Sqlmap tutorial (III) practical skills II
Report on market depth analysis and future trend prediction of China's arsenic trioxide industry from 2022 to 2028
随机推荐
Bit operation rules
【课程笔记】编译原理
Web service connector: Servlet
GTSAM中李群的運用
As3013 fire endurance test of cable distribution system
Sqlmap tutorial (III) practical skills II
Gtest之TEST宏的用法
Raised a kitten
Network protocol model
查询生产订单中某个(些)工作中心对应的标准文本码
Overview of three core areas of Mathematics: geometry
IPv6 comprehensive experiment
H3C V7 switch configuration IRF
HCIA复习
入侵检测领域数据集总结
continue和break的区别与用法
OSPF configuration command of Huawei equipment
【Postman】Collections-运行配置之导入数据文件
Practice sharing: how to safely and quickly migrate from CentOS to openeuler
在线问题与离线问题