Posted: 11 Jan, 2021
Given a 2D array of size Nx2 which contains a set of ‘N’ intervals. Each interval contains a starting point and an ending point. You need to find the size of the maximal set of mutually disjoint intervals.
Two sets [a,b] and [c,d] are disjoint intervals if there is no common point between these two intervals.
For example: [5,7] and [8,10] are disjoint intervals but the intervals [5,7] and [7,10] is not a disjoint interval as they have a common point, 7 in them.
Input format :
The first line of input contains an integer ‘T’ denoting the number of test cases. The next 2*T represents the ‘T’ test cases. The first line of each test case contains an integer ‘n’ denoting the number of intervals. The next ‘n’ lines of each test case contain two space-separated non-negative integers denoting the starting and end of an interval respectively.
Output Format :
For each test case, return the size of the maximal set of mutually disjoint sets.
You do not need to print anything. It has already been taken care of. Just implement the given function.
1 <= T <= 50 1 <= n <= 10^4 1 <= a < b <= 10^9 Where ‘T’ is the total number of test cases, ‘n’ is the number of intervals and ‘a’, ‘b’ are the starting and ending of an interval. Time Limit: 1 sec
- Sort the given interval set by their starting points.
- Traverse the sorted set from the start and for each interval calculate the maximal number of disjoint intervals ending before it.
- The recurrence relation is dp[i] = 1 + max(dp[j]) (0 <= j < i and ending(j)<starting(i))
- The answer is max(dp, dp, dp,.....,dp[n-1]).