当前位置:网站首页>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);
*/
边栏推荐
- 對數據安全的思考(轉載)
- 「 WEB测试工程师 」岗位一面总结
- 把el-tree选中的数组转换为数组对象
- Simulation volume leetcode [general] 1062 Longest repeating substring
- Basic knowledge of error
- Manhattan distance and Manhattan rectangle - print back font matrix
- JMeter做接口测试,如何提取登录Cookie
- Idea new UI usage
- [Tera term] black cat takes you to learn TTL script -- serial port automation skill in embedded development
- RestTemplate、Feign实现Token传递
猜你喜欢
【Tera Term】黑猫带你学TTL脚本——嵌入式开发中串口自动化神技能
LeetCode 729. 我的日程安排表 I
[postman] test script writing and assertion details
Idea new UI usage
技术分享 | 常见接口协议解析
Understanding of processes and threads
Postman core function analysis - parameterization and test report
LeetCode 731. 我的日程安排表 II
Manhattan distance sum - print diamond
JDBC Requset 对应内容及功能介绍
随机推荐
PHP uses redis to implement distributed locks
Hypothesis testing learning notes
leetcode 24. Exchange the nodes in the linked list in pairs
Simulation volume leetcode [general] 1314 Matrix area and
B - The Suspects
How to extract login cookies when JMeter performs interface testing
基于JEECG-BOOT的list页面的地址栏参数传递
On weak network test of special test
Simulation volume leetcode [general] 1219 Golden Miner
一文揭开,测试外包公司的真 相
黑猫带你学UFS协议第18篇:UFS如何配置逻辑单元(LU Management)
G - Supermarket
[no app push general test plan
Properties file
ESP32 ESP-IDF看门狗TWDT
使用Nacos管理配置
模拟卷Leetcode【普通】1296. 划分数组为连续数字的集合
Customize the gateway filter factory on the specified route
Data type of MySQL
記一個基於JEECG-BOOT的比較複雜的增删改功能的實現