当前位置:网站首页>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);
*/
边栏推荐
猜你喜欢
曼哈顿距离和-打印菱形
D - How Many Answers Are Wrong
sourceInsight中文乱码
LeetCode 729. 我的日程安排表 I
Construction and integration of Zipkin and sleuth for call chain monitoring
【Tera Term】黑猫带你学TTL脚本——嵌入式开发中串口自动化神技能
Delete the variables added to watch1 in keil MDK
Technology sharing | common interface protocol analysis
Black cat takes you to learn EMMC Protocol Part 10: EMMC read and write operation details (read & write)
MySQL之数据类型
随机推荐
【无App Push 通用测试方案
模拟卷Leetcode【普通】1447. 最简分数
MFC on the conversion and display of long string unsigned char and CString
Postman core function analysis - parameterization and test report
[Tera term] black cat takes you to learn TTL script -- serial port automation skill in embedded development
模拟卷Leetcode【普通】1062. 最长重复子串
黑猫带你学eMMC协议第10篇:eMMC读写操作详解(read & write)
Simulation volume leetcode [general] 1143 Longest common subsequence
keil MDK中删除添加到watch1中的变量
Leaflet map
[wechat applet] build a development tool environment
JDBC requset corresponding content and function introduction
The whole process realizes the single sign on function and the solution of "canceltoken" of undefined when the request is canceled
在JEECG-boot代码生成的基础上修改list页面(结合自定义的组件)
MySQL is sorted alphabetically
Basic knowledge of MySQL
JMeter做接口测试,如何提取登录Cookie
PHP uses redis to implement distributed locks
leetcode 24. Exchange the nodes in the linked list in pairs
[C language] string left rotation