Description

A bus has n stops numbered from 0 to n - 1 that form a circle. We know the distance between all pairs of neighboring stops where distance[i] is the distance between the stops number i and (i + 1) % n.

The bus goes along both directions i.e. clockwise and counterclockwise.

Return the shortest distance between the given start and destination stops.

Example 1:

  • Input: distance = [1,2,3,4], start = 0, destination = 1
  • Output: 1
  • Explanation: Distance between 0 and 1 is 1 or 9, minimum is 1.

Example 2:

  • Input: distance = [1,2,3,4], start = 0, destination = 2
  • Output: 3
  • Explanation: Distance between 0 and 2 is 3 or 7, minimum is 3.

Example 3:

  • Input: distance = [1,2,3,4], start = 0, destination = 3
  • Output: 4
  • Explanation: Distance between 0 and 3 is 6 or 4, minimum is 4.

Constraints:

  • 1 <= n <= 104
  • distance.length == n
  • 0 <= start, destination < n
  • 0 <= distance[i] <= 104

💡 Hint 1:
Find the distance between the two stops if the bus moved in clockwise or counterclockwise directions.

Submitted Code

class Solution:
    def distanceBetweenBusStops(self, distance: List[int], start: int, destination: int) -> int:
        n = len(distance)
        total = sum(distance)
        cw= sum(distance[ min(start, destination) : max(start, destination) ])
        ccw = total - cw

        return min(cw, ccw)

Runtime: 39 ms | Beats 97.70%
Memory: 18.04 MB | Beats 96.42%

시계방향(시작역 값이 도착역보다 작을 때)과 시계 반대방향의 거리 합은 모든 거리의 합과 같다는 것을 이용했다.

Other Solutions

1st

class Solution:
    def distanceBetweenBusStops(self, distance: list[int], start: int, destination: int) -> int:
        if start > destination:
            start, destination = destination, start
        clockwise = sum(distance[start:destination])
        total = sum(distance)
        return min(clockwise, total - clockwise)

time complexity: 𝑂(𝑛)
space complexity: 𝑂(1)

start가 destination보다 작거나 같도록 미리 설정하면 min()이나 max()를 사용하지 않아도 된다.

Leave a comment