当前位置:网站首页>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);
*/
边栏推荐
- J'ai un chaton.
- How to recover Huawei router's forgotten password
- Li Chuang EDA learning notes 12: common PCB board layout constraint principles
- properties文件
- Memory and stack related concepts
- How to use the container reflection method encapsulated by thinkphp5.1 in business code
- Hypothesis testing learning notes
- [web security] nodejs prototype chain pollution analysis
- Usage of test macro of GTEST
- VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator
猜你喜欢

养了只小猫咪

Mysql database master-slave cluster construction

HCIA复习

Report on the competition status and investment decision recommendations of Guangxi hospital industry in China from 2022 to 2028

【微信小程序】搭建开发工具环境

Detailed explanation of BF and KMP

C language learning notes (mind map)

P2802 go home

PAT(乙级)2022年夏季考试
![[untitled]](/img/5d/028b9d19e9a2b217f40198d4631db2.png)
[untitled]
随机推荐
华为路由器如何配置静态路由
The usage and difference between strlen and sizeof
【论文阅读】NFlowJS:基于鲁棒学习的合成负数据密集异常检测
Yunxiaoduo software internal test distribution test platform description document
单元测试的意义
华为路由器忘记密码怎么恢复
Introduction to promql of # yyds dry goods inventory # Prometheus
Hongliao Technology: Liu qiangdong's "heavy hand"
Zoom through the mouse wheel
多线程应用的测试与调试
Application du Groupe Li dans gtsam
Expose the serial fraudster Liu Qing in the currency circle, and default hundreds of millions of Cheng Laolai
CoordinatorLayout+NestedScrollView+RecyclerView 上拉底部显示不全
OSPF configuration command of Huawei equipment
Request forwarding and redirection
GTSAM中李群的運用
IDEA 新UI使用
Application of Lie group in gtsam
GTSAM中李群的运用
The difference and usage between continue and break