Check if any interval completely overlaps the other

• Difficulty Level : Easy
• Last Updated : 12 Jan, 2022

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(n2).

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:

C++

 // A C++ program to check if any two intervals// completely overlap#include using namespace std; // An interval has start time and end timestruct Interval {    int start;    int end;}; // Compares two intervals according to their starting// 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 overlapbool 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 codeint main(){    // 1st example    Interval arr1[] = { { 1, 3 }, { 1, 7 }, { 4, 8 },                                          { 2, 5 } };    int n1 = sizeof(arr1) / sizeof(arr1);    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);    if (isOverlap(arr2, n2))        cout << "Yes\n";    else        cout << "No\n";     return 0;}

Javascript



Output:

Yes
No

My Personal Notes arrow_drop_up