Hard

# 553. Minimize Scheduling Headaches: Clone Yourself for Overlapping Events

Problem Statement

You have a calendar with n events, each defined by a start time and a finish time. Some events may overlap, making it impossible for a single person to attend all of them. To ensure that every event is attended, you need to create k clones of yourself. Each clone can attend a subset of non-overlapping events. The objective is to minimize the number of clones required to cover all events.

Example 1:

```Events: [(1, 3),(2, 5),(4, 6)]
Output: 2
Clone 1 - (1, 3) and (4, 6).
Clone 2 - (2, 5)
```

Example 2:

```Events: [(1,4),(2,3),(3,5),(7,9)]
Output: 2
Clone 1 - (1, 4)(7,9)
Clone 2 - (2, 3)(3,5)
```

Approach: Greedy solution

• Sorting Events:
• This sorts the events based on their start times, ensuring we process them in chronological order.
• Min Heap Initialization:
• The min heap is used to keep track of the end times of clones, always allowing access to the clone that finishes the earliest.
• Processing Events:
• The for-loop iterates over each event and determines if the earliest available clone (the one with the smallest end time) can attend the event.
• If the clone can attend, its end time is updated.
• If no clone can attend, a new clone is created and added to the queue.
• Counting Clones:
• After processing all events, the size of the priority queue indicates the minimum number of clones needed.

Complete Code:

Output:

```Minimum clones required: 4
```