Last updated on October 5th, 2024 at 09:11 pm
Here, We see My Calendar I LeetCode Solution. This Leetcode problem is done in many programming languages like C++, Java, JavaScript, Python, etc. with different approaches.
List of all LeetCode Solution
Topics
Dynamic Programming, Minimax
Companies
Level of Question
Medium
My Calendar I LeetCode Solution
Table of Contents
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 double booking.
A double booking happens when two events have some non-empty intersection (i.e., some moment is common to both events.).
The event can be represented as a pair of integers start and end that represents a booking on the half-open interval [start, end), the range of real numbers x such that start <= x < end.
Implement the MyCalendar class:
- MyCalendar() Initializes the calendar object.
- boolean book(int start, int end) Returns 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.
Example 1:
Input: [“MyCalendar”, “book”, “book”, “book”] [[], [10, 20], [15, 25], [20, 30]]
Output: [null, true, false, true]
Explanation:
MyCalendar myCalendar = new MyCalendar();
myCalendar.book(10, 20); // return True
myCalendar.book(15, 25); // return False, It can not be booked because time 15 is already booked by another event.
myCalendar.book(20, 30); // return True, The event can be booked, as the first event takes every time less than 20, but not including 20.
1. My Calendar I LeetCode Solution C++
class MyCalendar { public: map<int, int> mp; MyCalendar() { } bool book(int start, int end) { auto it = mp.upper_bound(start); if (it == mp.end() || it->second >= end) { mp[end] = start; return true; } else return false; } };
2. My Calendar I LeetCode Solution Java
class MyCalendar { TreeMap<Integer,Integer> calendar = new TreeMap<>(); public MyCalendar() { calendar.put(Integer.MAX_VALUE, Integer.MAX_VALUE); } public boolean book(int start, int end) { Map.Entry<Integer,Integer> pair = calendar.higherEntry(start); boolean res = end <= pair.getValue(); if (res) calendar.put(end, start); return res; } }
3. My Calendar I Solution JavaScript
var MyCalendar = function() { this.cal = [] }; MyCalendar.prototype.book = function(start, end) { let l=0, r=this.cal.length-1 while(l <= r){ const mid = Math.floor((r+l)/2) const [s,e] = this.cal[mid] if(s < end && start < e ) return false if(start >= e){ l = mid+1 }else{ r = mid-1 } } this.cal.splice(l, 0 ,[start, end]) return true };
4. My Calendar I Solution Python
class MyCalendar(object): def __init__(self): self.calendar = [] def book(self, start, end): right = len(self.calendar) if right == 0: self.calendar.append((start, end)) return True left = 0 while left < right: mid = int(left + (right - left)/2) if self.calendar[mid][1] <= start: left = mid + 1 else: right = mid if left == len(self.calendar): self.calendar.append((start, end)) return True if self.calendar[left][0] >= end: self.calendar.insert(left, (start, end)) return True return False