729. My Calendar I
Difficulty: Medium
Topics: Array, Binary Search, Design, Segment Tree, Ordered Set
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:
Example 1:
["MyCalendar", "book", "book", "book"] [[], [10, 20], [15, 25], [20, 30]]
[null, true, false, true]
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.
Constraints:
Hint:
Solution:
We need to store each event and check if the new event conflicts with any of the existing events before booking it. Since at most 1000 calls to book are allowed, we can store the events in a list and iterate through them to check for overlaps when booking new events.
Let's implement this solution in PHP: 729. My Calendar I
book($start, $end); */ // Example Usage: $myCalendar = new MyCalendar(); var_dump($myCalendar->book(10, 20)); // true, no conflicts, booking added var_dump($myCalendar->book(15, 25)); // false, conflict with [10, 20] var_dump($myCalendar->book(20, 30)); // true, no conflicts, booking added ?>Explanation:
Constructor (__construct): Initializes an empty array $events to keep track of all booked events.
Booking Function (book):
- It takes the start and end of a new event.
- It iterates through the list of previously booked events and checks for any overlap:
- An overlap happens if the new event starts before an existing event ends ($start < $bookedEnd) and ends after an existing event starts ($end > $bookedStart).
- If any overlap is found, the function returns false, meaning the event cannot be booked.
- If no conflicts are found, the event is added to the $events array, and the function returns true to indicate successful booking.
Time Complexity:
First Booking (book(10, 20)):
Second Booking (book(15, 25)):
Third Booking (book(20, 30)):
This simple approach efficiently handles up to 1000 events while maintaining clarity and correctness.
Contact Links
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!