当前位置:网站首页>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);
*/
边栏推荐
- H3C S5820V2_ Upgrade method after stacking IRF2 of 5830v2 switch
- 【LeetCode】Day96-第一个唯一字符&赎金信&字母异位词
- 公司視頻加速播放
- 授予渔,从0开始搭建一个自己想要的网页
- 华为路由器忘记密码怎么恢复
- 功能安全之故障(fault),错误(error),失效(failure)
- GTSAM中ISAM2和IncrementalFixedLagSmoother说明
- The usage and difference between strlen and sizeof
- 如何在业务代码中使用 ThinkPHP5.1 封装的容器内反射方法
- Seven imperceptible truths in software testing
猜你喜欢

PAT(乙级)2022年夏季考试

SQLMAP使用教程(三)实战技巧二

网络协议模型

Is it difficult for an information system project manager?

Novice entry SCM must understand those things

Basic knowledge of error

J'ai un chaton.

IPv6 comprehensive experiment

Report on market depth analysis and future trend prediction of China's arsenic trioxide industry from 2022 to 2028

isam2运行流程
随机推荐
【API接口工具】postman-界面使用介绍
Luogu [Beginner Level 4] array p1427 number game of small fish
2022 software testing workflow to know
Hongliao Technology: Liu qiangdong's "heavy hand"
Request forwarding and redirection
GTSAM中李群的运用
Seven imperceptible truths in software testing
Detailed explanation of BF and KMP
Amazon Engineer: eight important experiences I learned in my career
(5) Explanation of yolo-v3 core source code (3)
Function of contenttype
[untitled]
【论文代码】SML部分代码阅读
C language bubble sort
properties文件
功能安全之故障(fault),错误(error),失效(failure)
ContentType的作用
Introduction to promql of # yyds dry goods inventory # Prometheus
请求转发与重定向
公司视频加速播放