# 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.
- Maximum points covered after removing an Interval
- Insert in sorted and non-overlapping interval array
- 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 N is a Factorion or not
- Check whether the given array is perfect or not
- Check whether bitwise OR of N numbers is Even or Odd
- Check whether (i,j) exists such that arr[i] != arr[j] and arr[arr[i]] is equal to arr[arr[j]]
- Check if all occurrences of a character appear together
- Check if the array is beautiful
- Check whether bitwise AND of N numbers is Even or Odd
- How to check if two given sets are disjoint?
- Check if two arrays are equal or not
- Check if it is possible to redistribute the Array

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.