Given the number of cities n numbered from 0 to n1 and the cities in which stations are located, the task is to find the maximum distance between any city and its nearest station. Note that the cities with stations can be given in any order.
Examples:
Input: numOfCities = 6, stations = [1, 4] Output: 1 Input: numOfCities = 6, stations = [3] Output: 3 Input: numOfCities = 6, stations = [3, 1] Output: 2
 The below figure represents the first example containing 6 cities and the cities with stations highlighted with green color. In this case, the farthest cities from their nearest stations are 0, 2, 3 and 5 each at a distance of 1. Hence maximum distance is 1.
 In the second example, the farthest city from its nearest station is 0 which is at a distance of 3. Hence maximum distance is 3.
 In the third example, the farthest city from its nearest station is 5 which is at a distance of 2. Hence maximum distance is 2.
Approach: There are three possible cases in this problem:
 When the farthest city is between two stations.
 When the farthest city is on the left side of the first station.
 When the farthest city is on the right side of the last station.
Below is the algorithm to solve the above problem:
 Initialize a boolean array of size n (number of cities) with False. Then mark the values of cities with stations as True
 Initialize a variable dist with 0. Initialize another variable maxDist with value which is equal to the first city with station (used for case 2).
 Start looping through all the cities ony by one.
 If the current city has a station, then assign the maximum of (dist+1)//2 and maxDist to maxDist (used for case 1). Also, assign 0 to dist.
 Else, increment dist.
 At the end, return the maximum of dist and maxDist (used for case 3).
Below is the implementation of the above approach:
// 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 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 
# 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# 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 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 ?> 
Max Distance: 2
Time Complexity: O(n)
Space Complexity: O(n)
Recommended Posts:
 Minimum cost required to connect all houses in a city
 Minimum Number of Platforms Required for a Railway/Bus Station
 Number of stopping station problem
 Minimum total cost incurred to reach the last station
 Distance of chord from center when distance between center and another equal length chord is given
 Find the shortest distance between any pair of two different good nodes
 Minimum distance between any most frequent and least frequent element of an array
 Find the minimum sum of distance to A and B from any integer point in a ring of size N
 Maximize minimum distance between repetitions from any permutation of the given Array
 Minimum distance between any special pair in the given array
 Count paths with distance equal to Manhattan distance
 Minimum distance between the maximum and minimum element of a given Array
 Find the radii of the circles which are lined in a row, and distance between the centers of first and last circle is given
 Find the side of the squares which are lined in a row, and distance between the centers of first and last square is given
 Program to find the maximum difference between the index of any two different numbers
 Maximum distance between two occurrences of same element in array
 Maximum distance between two unequal elements
 Maximum distance between two 1's in Binary representation of N
 Maximum distance between two elements whose absolute difference is K
 Maximum Manhattan distance between a distinct pair from N coordinates
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.