Untitled

 avatar
unknown
plain_text
16 days ago
1.5 kB
2
Indexable
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