LeetCode 题解工作台

公交站间的距离

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

category

1

题型

code_blocks

7

代码语言

hub

3

相关题

当前训练重点

简单 · 数组·driven

bolt

答案摘要

我们可以先统计出公交车的总行驶距离 ,然后模拟公交车的行驶过程,从出发点开始,每次向右移动一站,直到到达目的地为止,记录下这个过程中的行驶距离 ,最后返回 和 $s - t$ 中的最小值即可。 时间复杂度 ,其中 是数组 的长度。空间复杂度 。

Interview AiBox logo

Interview AiBox 实时 AI 助手,陪你讲清 数组·driven 题型思路

试试 AiBox 面试助手arrow_forward
description

题目描述

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

环线上的公交车都可以按顺时针和逆时针的方向行驶。

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

 

示例 1:

输入:distance = [1,2,3,4], start = 0, destination = 1
输出:1
解释:公交站 0 和 1 之间的距离是 1 或 9,最小值是 1。

 

示例 2:

输入:distance = [1,2,3,4], start = 0, destination = 2
输出:3
解释:公交站 0 和 2 之间的距离是 3 或 7,最小值是 3。

 

示例 3:

输入:distance = [1,2,3,4], start = 0, destination = 3
输出:4
解释:公交站 0 和 3 之间的距离是 6 或 4,最小值是 4。

 

提示:

  • 1 <= n <= 10^4
  • distance.length == n
  • 0 <= start, destination < n
  • 0 <= distance[i] <= 10^4
lightbulb

解题思路

方法一:模拟

我们可以先统计出公交车的总行驶距离 ss,然后模拟公交车的行驶过程,从出发点开始,每次向右移动一站,直到到达目的地为止,记录下这个过程中的行驶距离 tt,最后返回 ttsts - t 中的最小值即可。

时间复杂度 O(n)O(n),其中 nn 是数组 distance\textit{distance} 的长度。空间复杂度 O(1)O(1)

1
2
3
4
5
6
7
8
9
10
11
class Solution:
    def distanceBetweenBusStops(
        self, distance: List[int], start: int, destination: int
    ) -> int:
        s = sum(distance)
        t, n = 0, len(distance)
        while start != destination:
            t += distance[start]
            start = (start + 1) % n
        return min(t, s - t)
speed

复杂度分析

指标
时间complexity is O(n) as we may traverse the array once to compute total distance and again for clockwise sum. Space complexity is O(1) since no additional arrays or structures are required beyond variables to track sums.
空间Depends on the final approach
psychology

面试官常问的追问

外企场景
  • question_mark

    Checks if you handle circular array indices correctly.

  • question_mark

    Wants an efficient solution that avoids double-counting distances.

  • question_mark

    Looks for correct computation of both clockwise and counterclockwise paths.

warning

常见陷阱

外企场景
  • error

    Ignoring circular wraparound and causing index out-of-range errors.

  • error

    Summing only one direction and missing the shorter counter-direction path.

  • error

    Confusing start and destination indices, leading to incorrect distance calculations.

swap_horiz

进阶变体

外企场景
  • arrow_right_alt

    Compute distances for multiple pairs of stops efficiently using prefix sums.

  • arrow_right_alt

    Modify distances dynamically and query shortest paths repeatedly.

  • arrow_right_alt

    Handle weighted circular routes where distances change over time.

help

常见问题

外企场景

公交站间的距离题解:数组·driven | LeetCode #1184 简单