Problem: There is one meeting room in a firm. There are N meetings in the form of (start[i], end[i]) where start[i] is start time of meeting i and end[i] is finish time of meeting i.
What is the maximum number of meetings that can be accommodated in the meeting room when only one meeting can be held in the meeting room at a particular time?
Note: Start time of one chosen meeting can't be equal to the end time of the other chosen meeting.
Example:
Input: N = 6 start[] = {1,3,0,5,8,5} end[] = {2,4,6,7,9,9} Output: 4 Explanation: Maximum four meetings can be held with given start and end timings. The meetings are - (1, 2),(3, 4), (5,7) and (8,9)
Input:
N = 3
start[] = {10, 12, 20}
end[] = {20, 25, 30}
Output:
1
Explanation:
Only one meetings can be held
with given start and end timings.
Approach: We can sort these intervals based on start time and then the problem become super easy. You can look at the implementation to understand the rest of the approach.
Implementation in C#:
public int maxMeetings(int[] start, int[] end, int n)
{
if (n == 0)
{
return 0;
}
Meeting[] meetings = new Meeting[n];
for(int i = 0; i < n; ++i)
{
meetings[i] = new Meeting(start[i], end[i]);
}
Array.Sort(meetings, (m1, m2) => {
return m1.Start.CompareTo(m2.Start);
});
int count = 1;
for (int i = 1; i < n; ++i)
{
if (meetings[i].Start > meetings[i - 1].End)
{
++count;
}
else
{
meetings[i] = meetings[i].End < meetings[i - 1].End ?
meetings[i] :
meetings[i - 1];
}
}
return count;
}
Complexity: O(nlogn)
No comments:
Post a Comment