zoukankan      html  css  js  c++  java
  • 729. My Calendar I (Solution 1)

    package LeetCode_729
    
    /**
     * 729. My Calendar I
     * https://leetcode.com/problems/my-calendar-i/description/
     * https://zxi.mytechroad.com/blog/algorithms/binary-search/leetcode-729-my-calendar-i/
     *
     * Implement a MyCalendar class to store your events.
     * A new event can be added if adding the event will not cause a double booking.
    Your class will have the method, book(int start, int end).
    Formally, this represents a booking on the half open interval [start, end), the range of real numbers x such that start <= x < end.
    A double booking happens when two events have some non-empty intersection (ie., there is some time that is common to both events.)
    For each call to the method MyCalendar.book, return true if the event can be added to the calendar successfully without causing a double booking.
    Otherwise, return false and do not add the event to the calendar.
    Your class will be called like this: MyCalendar cal = new MyCalendar(); MyCalendar.book(start, end)
     * */
    class MyCalendar() {
        /*
        * solution 1: brute force, Time complexity:O(n^2), Space complexity:O(n);
        *
        * solution 2: binary search(TreeMap), Time complexity:O(nlogn), Space complexity:O(n);
        * 1. key = start;
        * 2. floor: largest entry whose key <= query key;
        * 3. ceiling: smallest entry whose key > query key;
        * 4. check floor and ceiling each time;
        * overlapping situation:
        * floor.end > query.start OR ceiling.start < query.end
        * */
    
        val booked = ArrayList<Pair<Int, Int>>()
    
        fun book(start: Int, end: Int): Boolean {
            for (book in booked) {
                val s = book.first
                val e = book.second
                //draw interval to understand!!
                if (Math.max(start, s) < Math.min(end, e)) {
                    return false
                }
            }
            booked.add(Pair(start, end))
            return true
        }
    }
    
    /**
     * Your MyCalendar object will be instantiated and called as such:
     * var obj = MyCalendar()
     * var param_1 = obj.book(start,end)
     */
  • 相关阅读:
    UVALive 4764 简单dp水题(也可以暴力求解)
    poj 2151 概率DP(水)
    poj 2299 归并排序求逆序数 (可做模板)
    poj2388 更水
    poj1936 假期计划第一水
    poj 3080 kmp求解多个字符串的最长公共字串,(数据小,有点小暴力 16ms)
    UVA315:Network(求割点)
    POJ1236:Network of Schools (思维+Tarjan缩点)
    SPOJ
    HDU4305:Lightning(生成树计数+判断点是否在线段上)
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13402606.html
Copyright © 2011-2022 走看看