Skip to content

Latest commit

 

History

History
187 lines (135 loc) · 4.68 KB

File metadata and controls

187 lines (135 loc) · 4.68 KB

中文文档

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:

    <li><code>1 &lt;= n&nbsp;&lt;= 10^4</code></li>
    
    <li><code>distance.length == n</code></li>
    
    <li><code>0 &lt;= start, destination &lt; n</code></li>
    
    <li><code>0 &lt;= distance[i] &lt;= 10^4</code></li>
    

Solutions

Python3

class Solution:
    def distanceBetweenBusStops(
        self, distance: List[int], start: int, destination: int
    ) -> int:
        if start > destination:
            start, destination = destination, start
        a = sum(distance[start:destination])
        b = sum(distance[:start]) + sum(distance[destination:])
        return min(a, b)

Java

class Solution {
    public int distanceBetweenBusStops(int[] distance, int start, int destination) {
        if (start > destination) {
            return distanceBetweenBusStops(distance, destination, start);
        }
        int a = 0, b = 0;
        for (int i = 0; i < distance.length; ++i) {
            if (i >= start && i < destination) {
                a += distance[i];
            } else {
                b += distance[i];
            }
        }
        return Math.min(a, b);
    }
}

C++

class Solution {
public:
    int distanceBetweenBusStops(vector<int>& distance, int start, int destination) {
        if (start > destination) return distanceBetweenBusStops(distance, destination, start);
        int a = 0, b = 0;
        for (int i = 0; i < distance.size(); ++i) {
            if (i >= start && i < destination)
                a += distance[i];
            else
                b += distance[i];
        }
        return min(a, b);
    }
};

Go

func distanceBetweenBusStops(distance []int, start int, destination int) int {
	if start > destination {
		return distanceBetweenBusStops(distance, destination, start)
	}
	a, b := 0, 0
	for i, v := range distance {
		if i >= start && i < destination {
			a += v
		} else {
			b += v
		}
	}
	if a < b {
		return a
	}
	return b
}

JavaScript

/**
 * @param {number[]} distance
 * @param {number} start
 * @param {number} destination
 * @return {number}
 */
var distanceBetweenBusStops = function (distance, start, destination) {
    if (start > destination) {
        return distanceBetweenBusStops(distance, destination, start);
    }
    let a = 0;
    let b = 0;
    for (let i = 0; i < distance.length; ++i) {
        if (i >= start && i < destination) {
            a += distance[i];
        } else {
            b += distance[i];
        }
    }
    return Math.min(a, b);
};

...