# Maximal Disjoint Intervals

Given a set of **N** intervals, the task is to find the maximal set of mutually disjoint intervals. Two intervals **[i, j]** & **[k, l]** are said to be disjoint if they do not have any point in common.

**Examples:**

Input:intervals[][] = {{1, 4}, {2, 3}, {4, 6}, {8, 9}}

Output:

[2, 3]

[4, 6]

[8, 9]

Intervals sorted w.r.t. end points = {{2, 3}, {1, 4}, {4, 6}, {8, 9}}

Intervals [2, 3] and [1, 4] overlap.

We must include [2, 3] because if [1, 4] is included then

we cannot include [4, 6].

Input:intervals[][] = {{1, 9}, {2, 3}, {5, 7}}

Output:

[2, 3]

[5, 7]

**Approach:**

- Sort the intervals, with respect to their end points.
- Now, traverse through all the intervals, if we get two overlapping intervals, then greedily choose the interval with lower end point since, choosing it will ensure that intervals further can be accommodated without any overlap.
- Apply the same procedure for all the intervals and print all the intervals which satisfy the above criteria.

Below is the implementation of the above approach:

`// C++ implementation of the approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` `#define ll long long int ` ` ` `// Function to sort the vector elements ` `// by second element of pairs ` `bool` `sortbysec(` `const` `pair<` `int` `, ` `int` `>& a, ` ` ` `const` `pair<` `int` `, ` `int` `>& b) ` `{ ` ` ` `return` `(a.second < b.second); ` `} ` ` ` `// Function to find maximal disjoint set ` `void` `maxDisjointIntervals(vector<pair<` `int` `, ` `int` `> > list) ` `{ ` ` ` ` ` `// Sort the list of intervals ` ` ` `sort(list.begin(), list.end(), sortbysec); ` ` ` ` ` `// First Interval will always be ` ` ` `// included in set ` ` ` `cout << ` `"["` `<< list[0].first << ` `", "` ` ` `<< list[0].second << ` `"]"` `<< endl; ` ` ` ` ` `// End point of first interval ` ` ` `int` `r1 = list[0].second; ` ` ` ` ` `for` `(` `int` `i = 1; i < list.size(); i++) { ` ` ` `int` `l1 = list[i].first; ` ` ` `int` `r2 = list[i].second; ` ` ` ` ` `// Check if given interval overlap with ` ` ` `// previously included interval, if not ` ` ` `// then include this interval and update ` ` ` `// the end point of last added interval ` ` ` `if` `(l1 > r1) { ` ` ` `cout << ` `"["` `<< l1 << ` `", "` ` ` `<< r2 << ` `"]"` `<< endl; ` ` ` `r1 = r2; ` ` ` `} ` ` ` `} ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `N = 4; ` ` ` `vector<pair<` `int` `, ` `int` `> > intervals = { { 1, 4 }, ` ` ` `{ 2, 3 }, ` ` ` `{ 4, 6 }, ` ` ` `{ 8, 9 } }; ` ` ` `maxDisjointIntervals(intervals); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

[2, 3] [4, 6] [8, 9]

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details

## Recommended Posts:

- Find Non-overlapping intervals among a given set of intervals
- Check if any two intervals overlap among a given set of intervals
- Find Intersection of all Intervals
- Count points covered by given intervals
- Maximum number of overlapping Intervals
- Find the point where maximum intervals overlap
- Make the intervals non-overlapping by assigning them to two different processors
- Count of available non-overlapping intervals to be inserted to make interval [0, R]
- How to check if two given sets are disjoint?
- Job Sequencing Problem | Set 2 (Using Disjoint Set)
- Minimize cost to convert given two integers to zero using given operations
- Count number of triangles possible for the given sides range
- Permutation of given string that maximizes count of Palindromic substrings
- Range Queries for count of Armstrong numbers in subarray using MO's algorithm

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.