# Check if any interval completely overlaps the other

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 <algorithm> ` `#include <iostream> ` `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; ` `} ` |

*chevron_right*

*filter_none*

Output:

Yes No

## Recommended Posts:

- Find the largest interval that contains exactly one of the given N integers.
- Insert in sorted and non-overlapping interval array
- Maximum points covered after removing an Interval
- Check whether a given number is even or odd
- Check if is possible to get given sum from a given set of elements
- Check whether the given array is perfect or not
- Check if the array is beautiful
- Check if all occurrences of a character appear together
- Check whether bitwise OR of N numbers is Even or Odd
- How to check if two given sets are disjoint?
- Check if it is possible to redistribute the Array
- Check if two arrays are permutations of each other
- Check if two arrays are equal or not
- Check whether (i,j) exists such that arr[i] != arr[j] and arr[arr[i]] is equal to arr[arr[j]]
- Check if all array elements are distinct

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.