在 C++ 中查找任意城市和车站之间的最大距离
概念
关于给定的城市数量 N(从 0 到 N-1 编号)和设有车站的城市,我们的任务是确定任意城市与其最近车站之间的最大距离。需要注意的是,设有车站的城市可以以任意顺序给出。
输入
numOfCities = 6, stations = [2, 4]
输出
2
输入
numOfCities = 6, stations = [4]
输出
4
下图显示了第一个示例,其中包含 6 个城市,并且设有车站的城市以绿色突出显示。因此,在这种情况下,距离其最近车站最远的城市是 0,距离为 2。因此最大距离为 1。
在第二个示例中,距离其最近车站最远的城市是 0,距离为 4。因此最大距离为 4。
方法
这里,此问题中存在三种可能的情况:
第一种情况表示最远城市位于两个车站之间。
第二种情况表示最远城市位于第一个车站的左侧。
最后一种情况表示最远城市位于最后一个车站的右侧。
为了解决上述问题,实现了以下算法:
我们初始化一个大小为 N(城市数量)的布尔数组,其值为 False。然后将设有车站的城市的相应值标记为 True。
接下来,我们将变量 dist 初始化为 0。我们必须初始化另一个变量 maxDist,其值为第一个设有车站的城市的值(用于第二种情况)。
开始逐个遍历所有城市。
已经观察到,如果当前城市设有车站,则将 (dist+1)//2 和 maxDist 的最大值赋给 maxDist(用于第一种情况)。此外,将 dist 赋为 0。
否则,递增 dist。
最后,返回 dist 和 maxDist 的最大值(用于第三种情况)。
示例
// C++ program to calculate the maximum // distance between any city // and its nearest station #include<bits/stdc++.h> using namespace std; // Shows function to compute the maximum // distance between any city and its nearest station int findMaxDistance(int numOfCities1,int station1[],int N){ // Used to initialize boolean list bool hasStation[numOfCities1 + 1] = {false}; // Used to assign True to cities containing station for (int city1 = 0; city1 < N; city1++){ hasStation[station1[city1]] = true; } int dist1 = 0; int maxDist1 = INT_MAX; for(int i = 0; i < N; i++){ maxDist1 = min(station1[i],maxDist1); } for (int city1 = 0; city1 < numOfCities1; city1++){ if (hasStation[city1] == true){ maxDist1 = max((dist1 + 1) / 2, maxDist1); dist1 = 0; } else dist1 += 1; } return max(maxDist1, dist1); } //Driver code int main(){ int numOfCities1 = 6; int station1[] = {2,4}; int N = sizeof(station1)/sizeof(station1[0]); cout << "Max Distance:" << findMaxDistance(numOfCities1, station1, N); }
输出
Max Distance:2
广告