Maximum number of overlapping Intervals - GeeksforGeeks

02 Feb, 2022
Given different intervals, the task is to print the maximum number of overlap among these intervals at any time.
Examples: 
Input: v = {{1, 2}, {2, 4}, {3, 6}} Output: 2 The maximum overlapping is 2(between (1 2) and (2 4) or between (2 4) and (3 6))  
Input: v = {{1, 8}, {2, 5}, {5, 6}, {3, 7}} Output: 4 The maximum overlapping is 4 (between (1, 8), (2, 5), (5, 6) and (3, 7)) 
Approach: 
The idea is to store coordinates in a new vector of pair mapped with characters ‘x’ and ‘y’, to identify coordinates.
Sort the vector.
Traverse the vector, if an x coordinate is encountered it means a new range is added, so update count and if y coordinate is encountered that means a range is subtracted.
Update the value of count for every new coordinate and take maximum.
Below is the implementation of the above approach: 
C++
Java
Python3
Javascript
// C++ program that print maximum// number of overlap// among given ranges#include <bits/stdc++.h>using namespace std; // Function that print maximum// overlap among rangesvoid overlap(vector<pair<int, int> > v){    // variable to store the maximum    // count    int ans = 0;    int count = 0;    vector<pair<int, char> > data;     // storing the x and y    // coordinates in data vector    for (int i = 0; i < v.size(); i++) {         // pushing the x coordinate        data.push_back({ v[i].first, 'x' });         // pushing the y coordinate        data.push_back({ v[i].second, 'y' });    }     // sorting of ranges    sort(data.begin(), data.end());     // Traverse the data vector to    // count number of overlaps    for (int i = 0; i < data.size(); i++) {         // if x occur it means a new range        // is added so we increase count        if (data[i].second == 'x')            count++;         // if y occur it means a range        // is ended so we decrease count        if (data[i].second == 'y')            count--;         // updating the value of ans        // after every traversal        ans = max(ans, count);    }     // printing the maximum value    cout << ans << endl;} // Driver codeint main(){    vector<pair<int, int> > v        = { { 1, 2 }, { 2, 4 }, { 3, 6 } };    overlap(v);    return 0;}
// Java program that print maximum// number of overlap among given rangesimport java.util.*;import java.lang.*;import java.io.*;class GFG{     static class pair{    int first;    char second;         pair(int first, char second)    {        this.first = first;        this.second = second;    }} // Function that print maximum// overlap among rangesstatic void overlap(int[][] v){         // Variable to store the maximum    // count    int ans = 0;    int count = 0;    ArrayList<pair> data = new ArrayList<>();         // Storing the x and y    // coordinates in data vector    for(int i = 0; i < v.length; i++)    {                 // Pushing the x coordinate        data.add(new pair(v[i][0], 'x'));           // pushing the y coordinate        data.add(new pair(v[i][1], 'y'));    }         // Sorting of ranges    Collections.sort(data, (a, b) -> a.first - b.first);       // Traverse the data vector to    // count number of overlaps    for(int i = 0; i < data.size(); i++)    {                 // If x occur it means a new range        // is added so we increase count        if (data.get(i).second == 'x')            count++;           // If y occur it means a range        // is ended so we decrease count        if (data.get(i).second == 'y')            count--;           // Updating the value of ans        // after every traversal        ans = Math.max(ans, count);    }       // Printing the maximum value    System.out.println(ans);} // Driver codepublic static void main(String[] args){    int[][] v = { { 1, 2 },                  { 2, 4 },                  { 3, 6 } };    overlap(v);}} // This code is contributed by offbeat
# Python3 program that print maximum# number of overlap# among given ranges # Function that print maximum# overlap among rangesdef overlap(v):     # variable to store the maximum    # count    ans = 0    count = 0    data = []     # storing the x and y    # coordinates in data vector    for i in range(len(v)):         # pushing the x coordinate        data.append([v[i][0], 'x'])         # pushing the y coordinate        data.append([v[i][1], 'y'])     # sorting of ranges    data = sorted(data)     # Traverse the data vector to    # count number of overlaps    for i in range(len(data)):         # if x occur it means a new range        # is added so we increase count        if (data[i][1] == 'x'):            count += 1         # if y occur it means a range        # is ended so we decrease count        if (data[i][1] == 'y'):            count -= 1         # updating the value of ans        # after every traversal        ans = max(ans, count)     # printing the maximum value    print(ans) # Driver codev = [ [ 1, 2 ], [ 2, 4 ], [ 3, 6 ] ]overlap(v) # This code is contributed by mohit kumar 29
<script> // Javascript program that print maximum// number of overlap among given ranges // Function that print maximum// overlap among rangesfunction overlap(v){         // Variable to store the maximum    // count    var ans = 0;    var count = 0;    var data = [];     // Storing the x and y    // coordinates in data vector    for(var i = 0; i < v.length; i++)    {                 // Pushing the x coordinate        data.push([v[i][0], 'x']);         // Pushing the y coordinate        data.push([v[i][1], 'y']);    }     // Sorting of ranges    data.sort();     // Traverse the data vector to    // count number of overlaps    for(var i = 0; i < data.length; i++)    {                 // If x occur it means a new range        // is added so we increase count        if (data[i][1] == 'x')            count++;         // If y occur it means a range        // is ended so we decrease count        if (data[i][1] == 'y')            count--;         // Updating the value of ans        // after every traversal        ans = Math.max(ans, count);    }     // Printing the maximum value    document.write(ans + "<br>");} // Driver codevar v = [ [ 1, 2 ], [ 2, 4 ], [ 3, 6 ] ];overlap(v); // This code is contributed by rutvik_56 </script>
2
 
mohit kumar 29
offbeat
rutvik_56
surinderdawra388
Arrays
Sorting
Arrays
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Stack Data Structure (Introduction and Program)
Top 50 Array Coding Problems for Interviews
Introduction to Arrays
Linear Search
Multidimensional Arrays in Java