当前位置:网站首页>LeetCode 731. My schedule II
LeetCode 731. My schedule II
2022-07-06 06:23:00 【Sasakihaise_】

【 Interval splitting and merging 】 I think it's complicated , Split the double overlapping interval , If you want to split an interval, you should consider the same endpoint .
class MyCalendarTwo {
// Splitting and merging of double ordered sets 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 Overlap is :max(key, start) min(value, end)
// Left is min(key, start) max(key, start) On the right is 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);
*/【 Optimize 】 In fact, it doesn't matter if the primary interval overlaps with the secondary interval , Because first of all, we will go to the double interval judgment .
class MyCalendarTwo {
// double 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);
*/
边栏推荐
- Customize the gateway filter factory on the specified route
- B - The Suspects
- Simulation volume leetcode [general] 1091 The shortest path in binary matrix
- JMeter做接口测试,如何提取登录Cookie
- 联合索引的左匹配原则
- sourceInsight中文乱码
- 基于JEECG-BOOT的list页面的地址栏参数传递
- Summary of anomaly detection methods
- Simulation volume leetcode [general] 1314 Matrix area and
- Simulation volume leetcode [general] 1061 Arrange the smallest equivalent strings in dictionary order
猜你喜欢

Redis 核心技术与实战之 基本架构:一个键值数据库包含什么?

JMeter做接口测试,如何提取登录Cookie

Caused by:org. gradle. api. internal. plugins . PluginApplicationException: Failed to apply plugin

G - Supermarket

Left matching principle of joint index

Construction and integration of Zipkin and sleuth for call chain monitoring

LeetCode 1200. 最小绝对差

LeetCode 732. 我的日程安排表 III

Delete the variables added to watch1 in keil MDK

win10无法操作(删除、剪切)文件
随机推荐
Technology sharing | common interface protocol analysis
sourceInsight中文乱码
职场进阶指南:大厂人必看书籍推荐
调用链监控Zipkin、sleuth搭建与整合
JDBC requset corresponding content and function introduction
JMeter做接口测试,如何提取登录Cookie
LeetCode 732. 我的日程安排表 III
MFC dynamically creates dialog boxes and changes the size and position of controls
leaflet 地图
F - true liars (category and search set +dp)
Leaflet map
Caused by:org. gradle. api. internal. plugins . PluginApplicationException: Failed to apply plugin
在JEECG-boot代码生成的基础上修改list页面(结合自定义的组件)
Reading notes of effective managers
MySQL之基础知识
全程实现单点登录功能和请求被取消报错“cancelToken“ of undefined的解决方法
数据库-当前读与快照读
模拟卷Leetcode【普通】1314. 矩阵区域和
模拟卷Leetcode【普通】1062. 最长重复子串
Simulation volume leetcode [general] 1405 Longest happy string