An interval is represented as a combination of start time and end time. Given a set of intervals, we need to write a program to check if any interval **completely** overlaps the other.

Examples:

Input: arr[] = {{1, 3}, {1, 7}, {4, 8}, {2, 5}} Output: true The intervals {1, 3} completely overlaps in {1, 7}. Input: arr[] = {{1, 3}, {7, 9}, {4, 6}, {10, 13}} Output: false No pair of intervals overlap.

A **Simple Solution** is to consider every pair of intervals and check if the pair overlaps or not. The time complexity of this solution is O(n^{2}).

A **better solution** is to use **Sorting**. Following is the complete algorithm.

1) Sort all intervals in increasing order of start time. This step takes **O(n Logn)** time.

2) In the sorted array, if the end time of an interval is not more than the end of the previous interval, then there is a complete overlap. This step takes **O(n)** time.

Given below is an implementation of the above approach:

`// A C++ program to check if any two intervals` `// completely overlap` `#include <bits/stdc++.h>` `using` `namespace` `std;` ` ` `// An interval has start time and end time` `struct` `Interval {` ` ` `int` `start;` ` ` `int` `end;` `};` ` ` `// Compares two intervals according to their staring ` `// time. This is needed for sorting the intervals ` `// using library function std::sort().` `bool` `compareInterval(Interval i1, Interval i2)` `{` ` ` `return` `(i1.start < i2.start) ? ` `true` `: ` `false` `;` `}` ` ` `// Function to check if any two intervals ` `// completely overlap` `bool` `isOverlap(Interval arr[], ` `int` `n)` `{` ` ` `// Sort intervals in increasing order of` ` ` `// start time` ` ` `sort(arr, arr + n - 1, compareInterval);` ` ` ` ` `// In the sorted array, if end time of an ` ` ` `// interval is not more than that of` ` ` `// end of previous interval, then there` ` ` `// is an overlap` ` ` `for` `(` `int` `i = 1; i < n; i++)` ` ` `if` `(arr[i].end <= arr[i - 1].end)` ` ` `return` `true` `;` ` ` ` ` `// If we reach here, then no overlap` ` ` `return` `false` `;` `}` ` ` `// Driver code` `int` `main()` `{` ` ` `// 1st example` ` ` `Interval arr1[] = { { 1, 3 }, { 1, 7 }, { 4, 8 }, ` ` ` `{ 2, 5 } };` ` ` `int` `n1 = ` `sizeof` `(arr1) / ` `sizeof` `(arr1[0]);` ` ` `if` `(isOverlap(arr1, n1))` ` ` `cout << ` `"Yes\n"` `;` ` ` `else` ` ` `cout << ` `"No\n"` `;` ` ` ` ` `// 2nd example` ` ` `Interval arr2[] = { { 1, 3 }, { 7, 9 }, { 4, 6 }, ` ` ` `{ 10, 13 } };` ` ` `int` `n2 = ` `sizeof` `(arr2) / ` `sizeof` `(arr2[0]);` ` ` `if` `(isOverlap(arr2, n2))` ` ` `cout << ` `"Yes\n"` `;` ` ` `else` ` ` `cout << ` `"No\n"` `;` ` ` ` ` `return` `0;` `}` |

Output:

Yes No

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.