1184、公交站间的距离

1184、[简单] 公交站间的距离

1、题目描述

环形公交路线上有 n 个站,按次序从 0n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 (i + 1) % n 的车站之间的距离。环线上的公交车都可以按顺时针和逆时针的方向行驶。

返回乘客从出发点 start 到目的地 destination 之间的最短距离。

2、解题思路

我们需要计算从起点 start 到终点 destination 的最短距离。由于公交路线是环形的,我们有两种可能的路径:顺时针方向和逆时针方向。我们可以计算这两条路径的长度,然后取最小值。

详细步骤

  1. 确保 start 小于 destination
    • 如果 start 大于 destination,我们交换它们的值。这可以简化后续的计算,只需要考虑顺时针方向的情况。
  2. 计算顺时针方向的距离
    • start 开始,沿着数组 distance 累加到 destination 的距离。这可以通过简单的循环实现。
  3. 计算逆时针方向的距离
    • 逆时针方向的距离等于环形总距离减去顺时针方向的距离。环形总距离可以通过累加整个数组 distance 的值得到。
  4. 返回最短距离
    • 比较顺时针方向和逆时针方向的距离,返回较小的值。

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 的所有元素得到。
  • 顺时针距离:从 startdestination 的距离,直接累加。
  • 逆时针距离:总距离减去顺时针距离。
  • 最短距离:返回顺时针和逆时针距离中的较小值。

这样我们就可以高效地计算从起

猜你喜欢

转载自blog.csdn.net/mmlhbjk/article/details/142309278