1184、[简单] 公交站间的距离
1、题目描述
环形公交路线上有 n
个站,按次序从 0
到 n - 1
进行编号。我们已知每一对相邻公交站之间的距离,distance[i]
表示编号为 i
的车站和编号为 (i + 1) % n
的车站之间的距离。环线上的公交车都可以按顺时针和逆时针的方向行驶。
返回乘客从出发点 start
到目的地 destination
之间的最短距离。
2、解题思路
我们需要计算从起点 start
到终点 destination
的最短距离。由于公交路线是环形的,我们有两种可能的路径:顺时针方向和逆时针方向。我们可以计算这两条路径的长度,然后取最小值。
详细步骤
- 确保
start
小于destination
:- 如果
start
大于destination
,我们交换它们的值。这可以简化后续的计算,只需要考虑顺时针方向的情况。
- 如果
- 计算顺时针方向的距离:
- 从
start
开始,沿着数组distance
累加到destination
的距离。这可以通过简单的循环实现。
- 从
- 计算逆时针方向的距离:
- 逆时针方向的距离等于环形总距离减去顺时针方向的距离。环形总距离可以通过累加整个数组
distance
的值得到。
- 逆时针方向的距离等于环形总距离减去顺时针方向的距离。环形总距离可以通过累加整个数组
- 返回最短距离:
- 比较顺时针方向和逆时针方向的距离,返回较小的值。
3、代码实现
class Solution {
public:
int distanceBetweenBusStops(vector<int>& distance, int start, int destination) {
// 确保 start 小于 destination
if (start > destination) {
swap(start, destination);
}
int n = distance.size();
int totalDistance = 0;
int clockwiseDistance = 0;
// 计算环形总距离
for (int dist : distance) {
totalDistance += dist;
}
// 计算顺时针方向的距离
for (int i = start; i < destination; i++) {
clockwiseDistance += distance[i];
}
// 计算逆时针方向的距离
int counterClockwiseDistance = totalDistance - clockwiseDistance;
// 返回最短距离
return min(clockwiseDistance, counterClockwiseDistance);
}
};
解释
- 环形总距离:通过累加数组
distance
的所有元素得到。 - 顺时针距离:从
start
到destination
的距离,直接累加。 - 逆时针距离:总距离减去顺时针距离。
- 最短距离:返回顺时针和逆时针距离中的较小值。
这样我们就可以高效地计算从起