【线段树】【leetcode 729. 我的日程安排表 I】
class MyCalendar { class Seg { int l; int r; boolean val; Seg left; Seg right; public Seg(int x, int y) { this.l = x; this.r = y; this.val = false; this.left = null; this.right = null; } public boolean exist(int left, int right) { if(this.val){ return true; } int mid = (this.l + this.r) / 2; if (left > mid) { if (this.right != null) { return this.right.exist(left, right); } return false; } else if (right <= mid) { if (this.left != null) { return this.left.exist(left, right); } return false; } else { boolean exist = false; if (this.left != null) { exist = this.left.exist(left, mid); } if (this.right != null) { exist = exist | this.right.exist(mid + 1, right); } return exist; } } public void insert(int start, int end) { if (start <= this.l && this.r <= end) { this.val = true; return; } int mid = (this.l + this.r) / 2; if (start > mid) { if (this.right == null) { this.right = new Seg(mid + 1, this.r); } this.right.insert(start, end); } else if (end <= mid) { if (this.left == null) { this.left = new Seg(this.l, mid); } this.left.insert(start, end); } else { if (this.right == null) { this.right = new Seg(mid + 1, this.r); } if (this.left == null) { this.left = new Seg(this.l, mid); } this.right.insert(mid + 1, end); this.left.insert(start, mid); } } } Seg root = null; public MyCalendar() { root = new Seg(0, 1000_000_000); } public boolean book(int start, int end) { if (root.exist(start, end-1)) { return false; } root.insert(start, end-1); return true; } public static void main(String[] args) { MyCalendar calendar = new MyCalendar(); System.out.println(calendar.book(47,50)); System.out.println(calendar.book(15,25)); System.out.println(calendar.book(20,30)); } } /** * Your MyCalendar object will be instantiated and called as such: * MyCalendar obj = new MyCalendar(); * boolean param_1 = obj.book(start,end); */
本文作者:fishcanfly
本文链接:https://www.cnblogs.com/fishcanfly/p/17545132.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步