Número máximo de intervalos superpuestos

Dados diferentes intervalos, la tarea es imprimir el número máximo de superposición entre estos intervalos en cualquier momento.

Ejemplos: 

Entrada: v = {{1, 2}, {2, 4}, {3, 6}} 
Salida:
La superposición máxima es 2 (entre (1 2) y (2 4) o entre (2 4) y ( 3 6)) 
 

Entrada: v = {{1, 8}, {2, 5}, {5, 6}, {3, 7}} 
Salida:
La superposición máxima es 4 (entre (1, 8), (2, 5) , (5, 6) y (3, 7))
 

Acercarse: 

  • La idea es almacenar coordenadas en un nuevo vector de par mapeado con caracteres ‘x’ e ‘y’, para identificar coordenadas.
  • Ordenar el vector.
  • Atraviese el vector, si se encuentra una coordenada x, significa que se agrega un nuevo rango, así que actualice el conteo y si se encuentra la coordenada y, significa que se resta un rango.
  • Actualice el valor de conteo para cada nueva coordenada y tome el máximo.

A continuación se muestra la implementación del enfoque anterior:
 

C++

// C++ program that print maximum
// number of overlap
// among given ranges
#include <bits/stdc++.h>
using namespace std;
 
// Function that print maximum
// overlap among ranges
void 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 code
int main()
{
    vector<pair<int, int> > v
        = { { 1, 2 }, { 2, 4 }, { 3, 6 } };
    overlap(v);
    return 0;
}

Java

// Java program that print maximum
// number of overlap among given ranges
import 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 ranges
static 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 code
public static void main(String[] args)
{
    int[][] v = { { 1, 2 },
                  { 2, 4 },
                  { 3, 6 } };
    overlap(v);
}
}
 
// This code is contributed by offbeat

Python3

# Python3 program that print maximum
# number of overlap
# among given ranges
 
# Function that print maximum
# overlap among ranges
def 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 code
v = [ [ 1, 2 ], [ 2, 4 ], [ 3, 6 ] ]
overlap(v)
 
# This code is contributed by mohit kumar 29

Javascript

<script>
 
// Javascript program that print maximum
// number of overlap among given ranges
 
// Function that print maximum
// overlap among ranges
function 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 code
var v = [ [ 1, 2 ], [ 2, 4 ], [ 3, 6 ] ];
overlap(v);
 
// This code is contributed by rutvik_56
 
</script>
Producción: 

2

 

Publicación traducida automáticamente

Artículo escrito por nitinkr8991 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *