Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: My Calendar II

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "731" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

You are implementing a program to use as your calendar. We can add a new event if adding the event will not cause a triple booking. A triple booking happens when three events have some non-empty intersection (i.e., some moment is common to all the three events.). The event can be represented as a pair of integers startTime and endTime that represents a booking on the half-open interval [startTime, endTime), the range of real numbers x such that startTime <= x < endTime. Implement the MyCalendarTwo class: MyCalendarTwo() Initializes the calendar object. boolean book(int startTime, int endTime) Returns true if the event can be added to the calendar successfully without causing a triple booking. Otherwise, return false and do not add the event to the calendar. Example 1: Input ["MyCalendarTwo", "book", "book", "book", "book", "book", "book"] [[], [10, 20], [50, 60], [10, 40], [5, 15], [5, 10], [25, 55]] Output [null, true, true, true, false, true, true] Explanation MyCalendarTwo myCalendarTwo = new MyCalendarTwo(); myCalendarTwo.book(10, 20); // return True, The event can be booked. myCalendarTwo.book(50, 60); // return True, The event can be booked. myCalendarTwo.book(10, 40); // return True, The event can be double booked. myCalendarTwo.book(5, 15); // return False, The event cannot be booked, because it would result in a triple booking. myCalendarTwo.book(5, 10); // return True, The event can be booked, as it does not use time 10 which is already double booked. myCalendarTwo.book(25, 55); // return True, The event can be booked, as the time in [25, 40) will be double booked with the third event, the time [40, 50) will be single booked, and the time [50, 55) will be double booked with the second event. Constraints: 0 <= start < end <= 109 At most 1000 calls will be made to book.

Explanation

Here's the solution approach, complexity analysis, and Python code for the MyCalendarTwo problem:

  • Differential Arrays: Use two sorted lists (or ordered dictionaries if available in the language, but sorted lists with binary search offer similar performance in Python) to track booking counts. One list bookings keeps track of all bookings (single and double). The other list overlaps keeps track of only the double bookings (overlaps).
  • Increment/Decrement Counts: When a new event comes in, iterate through existing overlaps. If the new event overlaps with any existing double booking, it leads to a triple booking, and we reject the event. Otherwise, add the event to the bookings list. Then, iterate through the existing bookings and identify newly formed double bookings with the current event and add it to the overlaps list. Maintain bookings and overlaps in sorted order.

  • Complexity:

    • Runtime: O(n^2) in the worst case due to nested loops for finding overlaps, where n is the number of bookings. Using binary search in sorted lists to find overlaps reduces the average time complexity.
    • Storage: O(n) to store booking intervals.

Code

    class MyCalendarTwo:

    def __init__(self):
        self.bookings = []
        self.overlaps = []

    def book(self, start: int, end: int) -> bool:
        for s, e in self.overlaps:
            if start < e and end > s:
                return False

        for s, e in self.bookings:
            if start < e and end > s:
                self.overlaps.append((max(start, s), min(end, e)))

        self.bookings.append((start, end))
        return True

More from this blog

C

Chatmagic blog

2894 posts