当前位置:网站首页>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);
*/
边栏推荐
- IPv6 comprehensive experiment
- Expose the serial fraudster Liu Qing in the currency circle, and default hundreds of millions of Cheng Laolai
- 【Postman】测试(Tests)脚本编写和断言详解
- C language learning notes (mind map)
- H3C防火墙RBM+VRRP 组网配置
- Raised a kitten
- As3013 fire endurance test of cable distribution system
- Investment strategy discussion and market scale prediction report of China's solid state high power amplifier industry from 2022 to 2028
- Huawei BFD configuration specification
- Li Chuang EDA learning notes 12: common PCB board layout constraint principles
猜你喜欢

【eolink】PC客户端安装

The usage and difference between strlen and sizeof

异常检测方法总结

华为路由器如何配置静态路由

J'ai un chaton.

Leetcode 701 insertion operation in binary search tree -- recursive method and iterative method

Hongliao Technology: Liu qiangdong's "heavy hand"

LAN communication process in the same network segment

【Postman】Collections-运行配置之导入数据文件

功能安全之故障(fault),错误(error),失效(failure)
随机推荐
CoordinatorLayout+NestedScrollView+RecyclerView 上拉底部显示不全
Expose the serial fraudster Liu Qing in the currency circle, and default hundreds of millions of Cheng Laolai
Market development prospect and investment risk assessment report of China's humidity sensor industry from 2022 to 2028
Practice sharing: how to safely and quickly migrate from CentOS to openeuler
Seven imperceptible truths in software testing
As3013 fire endurance test of cable distribution system
Memory and stack related concepts
properties文件
误差的基本知识
H3C防火墙RBM+VRRP 组网配置
Idea new UI usage
Cognitive introspection
Commodity price visualization
Sqlmap tutorial (III) practical skills II
[web security] nodejs prototype chain pollution analysis
Arrays and collections
[ram IP] introduction and experiment of ram IP core
Testing and debugging of multithreaded applications
[leetcode] day96 - the first unique character & ransom letter & letter ectopic word
Raised a kitten