java 日程表_Java实现 LeetCode 729 我的日程安排表 I(二叉树)
729. 我的日程安排表 I
實現(xiàn)一個 MyCalendar 類來存放你的日程安排。如果要添加的時間內(nèi)沒有其他安排,則可以存儲這個新的日程安排。
MyCalendar 有一個 book(int start, int end)方法。它意味著在 start 到 end 時間內(nèi)增加一個日程安排,注意,這里的時間是半開區(qū)間,即 [start, end), 實數(shù) x 的范圍為, start <= x < end。
當兩個日程安排有一些時間上的交叉時(例如兩個日程安排都在同一時間內(nèi)),就會產(chǎn)生重復(fù)預(yù)訂。
每次調(diào)用 MyCalendar.book方法時,如果可以將日程安排成功添加到日歷中而不會導(dǎo)致重復(fù)預(yù)訂,返回 true。否則,返回 false 并且不要將該日程安排添加到日歷中。
請按照以下步驟調(diào)用 MyCalendar 類: MyCalendar cal = new MyCalendar(); MyCalendar.book(start, end)
示例 1:
MyCalendar();
MyCalendar.book(10, 20); // returns true
MyCalendar.book(15, 25); // returns false
MyCalendar.book(20, 30); // returns true
解釋:
第一個日程安排可以添加到日歷中. 第二個日程安排不能添加到日歷中,因為時間 15 已經(jīng)被第一個日程安排預(yù)定了。
第三個日程安排可以添加到日歷中,因為第一個日程安排并不包含時間 20 。
說明:
每個測試用例,調(diào)用 MyCalendar.book 函數(shù)最多不超過 100次。
調(diào)用函數(shù) MyCalendar.book(start, end)時, start 和 end 的取值范圍為 [0, 10^9]。
class TNode{
int start;
int end;
TNode left;
TNode right;
TNode(int start, int end){
this.start = start;
this.end = end;
}
boolean insert (TNode node){
if (node.end <= this.start){
if (this.left == null){
this.left = node;
return true;
}
return this.left.insert(node);
}
else if (node.start >= this.end){
if (this.right == null){
this.right = node;
return true;
}
return this.right.insert(node);
}
else{
return false;
}
}
}
class MyCalendar {
TNode root;
public MyCalendar() {
root = null;
}
public boolean book(int start, int end) {
if (root == null){
root = new TNode(start, end);
return true;
}
return root.insert(new TNode(start, end));
}
}
/**
* Your MyCalendar object will be instantiated and called as such:
* MyCalendar obj = new MyCalendar();
* boolean param_1 = obj.book(start,end);
*/
總結(jié)
以上是生活随笔為你收集整理的java 日程表_Java实现 LeetCode 729 我的日程安排表 I(二叉树)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读《创业36条军规》(六)凡事只能靠自己
- 下一篇: 计算机网络局域网之无线局域网