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 で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上が。私のカレンダー Iの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。