Untitled
class MyCalendarTwo { private List<Booking> bookings; private List<Booking> unique_overlapped_regions_intervals; public MyCalendarTwo() { bookings = new ArrayList<>(); unique_overlapped_regions_intervals = new ArrayList<>(); } private boolean isOverlap(int s1, int e1, int s2, int e2) { int overlapped_region_start = Math.max(s1,s2); int overlapped_region_end = Math.min(e1,e2); return overlapped_region_start <= overlapped_region_end; } public boolean book(int start, int end) { // Check if the current booking overlaps with any double booking (triple booking) for (Booking over_reg_interval : unique_overlapped_regions_intervals) { if (isOverlap(over_reg_interval.start, over_reg_interval.end, start, end)) { return false; // Triple booking detected } } // Check for double booking and record overlaps for (Booking booking : bookings) { if (isOverlap(booking.start, booking.end, start, end)) { unique_overlapped_regions_intervals.add(new Booking(Math.max(booking.start, start), Math.min(booking.end, end))); } } bookings.add(new Booking(start, end)); // Add the current booking return true; } private class Booking { int start, end; Booking(int start, int end) { this.start = start; this.end = end; } } }
Leave a Comment