• My Calendar I


      题目大意是实现一个类来管理图书,类的每个实例包含图书的start跟end属性(start<= x < end),确保每个实例的两个属性没有重叠范围。

      很容易想到二叉排序树,将每个实例看成一个结点,有三种情况:

      1.新插入结点的start大于P结点的end,则将新插入结点插入到P结点的右子树,P = P.left。

      2.新插入结点的end小于P结点的start,则将新插入结点插入到P结点的左子树,P = P.right。

      3.新插入结点的范围跟P结点的范围有重叠,则返回false。

      

      给出Java代码:

      

    class MyCalendar {
        private MyCalendar left, right;
        private int start, end, tag;
        private MyCalendar root;
        
        public MyCalendar() {
            this.root = null;
        }
        
        public MyCalendar(int start, int end) {
            this.start = start;
            this.end = end;
        }
        
        public boolean book(int start, int end) {
            if(root == null) {
                root = new MyCalendar(start, end);
            } else {
                MyCalendar p = root;
                MyCalendar pre = p;
                tag = 0;
                while(p != null) {
                    pre = p;
                    if(end <= p.start) {
                        tag = 0;
                        p = p.left;
                    } else if(start >= p.end){
                        tag = 1;
                        p = p.right;
                    } else {
                        return false;
                    }
                }
                
                if(tag == 0) {
                    pre.left = new MyCalendar(start, end);
                } else {
                    pre.right = new MyCalendar(start,end);
                }
            }
            return true;
        }
    }
    
    
    /**
     * Your MyCalendar object will be instantiated and called as such:
     * MyCalendar obj = new MyCalendar();
     * boolean param_1 = obj.book(start,end);
     */
  • 相关阅读:
    团队开发冲刺第十五天
    团队开发冲刺第十四天
    团队开发冲刺第十三天
    团队开发冲刺第十二天
    团队开发冲刺第十一天
    团队开发冲刺第十天
    幸运抽奖案例
    java中如何数组是如何赋值的?
    使用java中的String类操作复杂的字符串
    java中随机生成26个字母组合的随机验证码
  • 原文地址:https://www.cnblogs.com/CGJobs/p/7931885.html
Copyright © 2020-2023  润新知