You're asking for the **Leetcode "Meeting Rooms"** problem — there are **two variants**:
---
### ✅ **1. Leetcode 252 – Meeting Rooms**
**Problem**: Given an array of meeting time intervals `intervals` where `intervals[i] = [start, end]`, determine if a person could attend all meetings.
---
### 🔹 **C++ Solution:**
```cpp
class Solution {
public:
bool canAttendMeetings(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end());
for (int i = 1; i < intervals.size(); ++i) {
if (intervals[i][0] < intervals[i - 1][1]) {
return false; // overlap
}
}
return true;
}
};
```
---
### ✅ **2. Leetcode 253 – Meeting Rooms II**
**Problem**: Return the **minimum number of conference rooms required**.
---
### 🔹 **Optimized C++ Solution (Using Min Heap):**
```cpp
class Solution {
public:
int minMeetingRooms(vector<vector<int>>& intervals) {
if (intervals.empty()) return 0;
// Sort meetings by start time
sort(intervals.begin(), intervals.end());
// Min-heap to keep track of end times
priority_queue<int, vector<int>, greater<int>> minHeap;
for (auto& meeting : intervals) {
// If the earliest meeting ends before the current one starts, reuse room
if (!minHeap.empty() && minHeap.top() <= meeting[0]) {
minHeap.pop();
}
minHeap.push(meeting[1]); // add current meeting's end time
}
return minHeap.size(); // Number of rooms used
}
};
```
---
### 🧠 Explanation:
* **Sort by start time.**
* Use a **min-heap** to track current meetings’ end times.
* If a meeting can reuse a room (start time ≥ earliest end time), pop the heap.
* Push the current meeting's end time to the heap.
* The **heap size = number of rooms needed**.
---
Let me know if you want the **Python version**, **visual explanation**, or **handling edge cases** like duplicate meetings.