Encuentra la distancia máxima entre cualquier ciudad y estación

Dada la cantidad de ciudades n numeradas del 0 al n-1 y las ciudades en las que se encuentran las estaciones, la tarea es encontrar la distancia máxima entre cualquier ciudad y su estación más cercana. Tenga en cuenta que las ciudades con estaciones se pueden dar en cualquier orden.
Ejemplos: 
 

Input: numOfCities = 6, stations = [1, 4]
Output: 1

Input: numOfCities = 6, stations = [3]
Output: 3

Input: numOfCities = 6, stations = [3, 1]
Output: 2
  1. La siguiente figura representa el primer ejemplo que contiene 6 ciudades y las ciudades con estaciones resaltadas en color verde. En este caso, las ciudades más alejadas de sus estaciones más cercanas son 0, 2, 3 y 5, cada una a una distancia de 1. Por lo tanto, la distancia máxima es 1.
  2. En el segundo ejemplo, la ciudad más alejada de su estación más cercana es 0, que está a una distancia de 3. Por lo tanto, la distancia máxima es 3.
  3. En el tercer ejemplo, la ciudad más alejada de su estación más cercana es 5, que está a una distancia de 2. Por lo tanto, la distancia máxima es 2.

Enfoque: Hay tres casos posibles en este problema:
 

  1. Cuando la ciudad más lejana se encuentra entre dos estaciones.
  2. Cuando la ciudad más lejana está del lado izquierdo de la primera estación.
  3. Cuando la ciudad más lejana está a la derecha de la última estación.

A continuación se muestra el algoritmo para resolver el problema anterior:
 

  • Inicialice una array booleana de tamaño n (número de ciudades) con False . Luego marque los valores de las ciudades con estaciones como True
  • Inicialice una variable dist con 0. Inicialice otra variable maxDist con un valor que sea igual a la primera ciudad con la estación (usado para el caso 2).
  • Comience a recorrer todas las ciudades una por una.
  • Si la ciudad actual tiene una estación, entonces asigne el máximo de ( dist +1)//2 y maxDist a maxDist (usado para el caso 1). Además, asigne 0 a dist .
  • De lo contrario, incremente dist .
  • Al final, devuelva el máximo de dist y maxDist (usado para el caso 3).

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

C++

// C++ program to calculate the maximum 
// distance between any city
// and its nearest station
#include<bits/stdc++.h>
  
using namespace std;
  
// Function to calculate the maximum 
// distance between any city and its nearest station
int findMaxDistance(int numOfCities,int station[],int n)
{ 
    // Initialize boolean list
    bool hasStation[numOfCities + 1] = {false};
      
    // Assign True to cities containing station
    for (int city = 0; city < n; city++)
    {
        hasStation[station[city]] = true;
    }
          
    int dist = 0;
    int maxDist = INT_MAX;
  
    for(int i = 0; i < n; i++)
    {
        maxDist = min(station[i],maxDist);
    }
  
    for (int city = 0; city < numOfCities; city++)
    {
        if (hasStation[city] == true)
        {
            maxDist = max((dist + 1) / 2, maxDist);
            dist = 0;
        }
        else
            dist += 1;
    }
    return max(maxDist, dist);
} 
  
//Driver code
int main()
{ 
    int numOfCities = 6;
    int station[] = {3, 1};
    int n = sizeof(station)/sizeof(station[0]);
  
    cout << "Max Distance:" << findMaxDistance(numOfCities,
                                                station, n);
}
  
//This code is contributed by Mohit Kumar 29

Java

// Java program to calculate the maximum 
// distance between any city
// and its nearest station
import java.util.*;
  
class GFG
{
  
// Function to calculate the maximum 
// distance between any city and its nearest station
static int findMaxDistance(int numOfCities,
                            int station[],int n)
{ 
    // Initialize boolean list
    boolean hasStation[] = new boolean[numOfCities + 1];
      
    // Assign True to cities containing station
    for (int city = 0; city < n; city++)
    {
    hasStation[station[city]] = true;
    }
          
    int dist = 0;
    int maxDist = Integer.MAX_VALUE;
  
    for(int i = 0; i < n; i++)
    {
        maxDist = Math.min(station[i],maxDist);
    }
  
    for (int city = 0; city < numOfCities; city++)
    {
        if (hasStation[city] == true)
        {
            maxDist = Math.max((dist + 1) / 2, maxDist);
            dist = 0;
        }
        else
            dist += 1;
    }
    return Math.max(maxDist, dist);
} 
  
//Driver code
public static void main(String args[])
{ 
    int numOfCities = 6;
    int station[] = {3, 1};
    int n = station.length;
  
    System.out.println("Max Distance:"+
        findMaxDistance(numOfCities,station, n));
}
}
  
// This code is contributed by
// Surendra_Gnagwar

Python

# Python3 code to calculate the maximum 
# distance between any city and its nearest station
  
# Function to calculate the maximum 
# distance between any city and its nearest station
def findMaxDistance(numOfCities, station):
      
    # Initialize boolean list
    hasStation = [False] * numOfCities
    # Assign True to cities containing station
    for city in station:
        hasStation[city] = True
          
    dist, maxDist = 0, min(station)
  
    for city in range(numOfCities):
        if hasStation[city] == True:
            maxDist = max((dist + 1) // 2, maxDist)
            dist = 0
              
        else:
            dist += 1
              
    return max(maxDist, dist)
      
numOfCities = 6
station = [3, 1]
print("Max Distance:", findMaxDistance(numOfCities, station))

C#

// C# program to calculate the maximum 
// distance between any city 
// and its nearest station 
using System;
  
class GFG 
{ 
  
// Function to calculate the maximum 
// distance between any city and its nearest station 
static int findMaxDistance(int numOfCities, 
                            int []station,int n) 
{ 
    // Initialize boolean list 
    bool []hasStation = new bool[numOfCities + 1]; 
      
    // Assign True to cities containing station 
    for (int city = 0; city < n; city++) 
    { 
        hasStation[station[city]] = true; 
    } 
          
    int dist = 0; 
    int maxDist = int.MaxValue; 
  
    for(int i = 0; i < n; i++) 
    { 
        maxDist = Math.Min(station[i],maxDist); 
    } 
  
    for (int city = 0; city < numOfCities; city++) 
    { 
        if (hasStation[city] == true) 
        { 
            maxDist = Math.Max((dist + 1) / 2, maxDist); 
            dist = 0; 
        } 
        else
            dist += 1; 
    } 
    return Math.Max(maxDist, dist); 
} 
  
// Driver code 
public static void Main(String []args) 
{ 
    int numOfCities = 6; 
    int []station = {3, 1}; 
    int n = station.Length; 
  
    Console.WriteLine("Max Distance:"+ 
        findMaxDistance(numOfCities,station, n)); 
} 
} 
  
// This code has been contributed by 29AjayKumar

PHP

<?php
// PHP program to calculate the maximum 
// distance between any city
// and its nearest station
  
// Function to calculate the maximum 
// distance between any city and 
// its nearest station
function findMaxDistance($numOfCities, 
                         $station, $n)
{ 
    // Initialize boolean list
    $hasStation = array_fill(0, $numOfCities + 1, 
                                          false);
      
    // Assign True to cities containing station
    for ($city = 0; $city < $n; $city++)
    {
        $hasStation[$station[$city]] = true;
    }
          
    $dist = 0;
    $maxDist = PHP_INT_MAX;
  
    for($i = 0; $i < $n; $i++)
    {
        $maxDist = min($station[$i], $maxDist);
    }
  
    for ($city = 0; 
         $city < $numOfCities; $city++)
    {
        if ($hasStation[$city] == true)
        {
            $maxDist = max((int)(($dist + 1) / 2), 
                                        $maxDist);
            $dist = 0;
        }
        else
            $dist += 1;
    }
    return max($maxDist, $dist);
} 
  
// Driver code
$numOfCities = 6;
$station = array(3, 1);
$n = count($station);
  
echo "Max Distance: ".findMaxDistance($numOfCities,
                                      $station, $n);
  
// This code is contributed by mits
?>

Javascript

<script>
  
// Javascript program to calculate the maximum 
// distance between any city
// and its nearest station
  
// Function to calculate the maximum 
// distance between any city and its nearest station
function findMaxDistance(numOfCities,station,n)
{ 
    // Initialize boolean list
    var hasStation = Array(numOfCities+1).fill(false);
      
    // Assign True to cities containing station
    for (var city = 0; city < n; city++)
    {
        hasStation[station[city]] = true;
    }
          
    var dist = 0;
    var maxDist = 1000000000;
  
    for(var i = 0; i < n; i++)
    {
        maxDist = Math.min(station[i],maxDist);
    }
  
    for (var city = 0; city < numOfCities; city++)
    {
        if (hasStation[city] == true)
        {
            maxDist = Math.max((dist + 1) / 2, maxDist);
            dist = 0;
        }
        else
            dist += 1;
    }
    return Math.max(maxDist, dist);
} 
  
//Driver code
var numOfCities = 6;
var station = [3, 1];
var n = station.length;
document.write( "Max Distance: " + findMaxDistance(numOfCities,
                                            station, n));
  
  
</script>    
Producción: 

Max Distance: 2

 

Complejidad temporal: O(n) 
Complejidad espacial: O(n)
 

Publicación traducida automáticamente

Artículo escrito por rituraj_jain 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 *