https://leetcode.com/problems/distance-between-bus-stops/ | Easy |
---|
Дано кольцевое шоссе с n
остановками, расстояние между которыми задано массивом distance
, где distance[i]
— расстояние между остановками i
и (i + 1) % n
. Нужно найти минимальное расстояние между остановками start
и destination
.
Input:
distance = [1, 2, 3, 4], start = 0, destination = 1Output:
1Explanation:
Единственный маршрут — от остановки0
до1
, расстояние1
.
Input:
distance = [1, 2, 3, 4], start = 0, destination = 2Output:
2Explanation:
По часовой стрелке:1 + 2 = 3
. Против часовой стрелки:4
, минимальное расстояние —3
.
Input:
distance = [1, 2, 3, 4], start = 0, destination = 3Output:
3Explanation:
По часовой стрелке:1 + 2 + 3 = 6
. Против часовой стрелки:4
, минимальное расстояние —4
.
fun distanceBetweenBusStops(distance: IntArray, start: Int, destination: Int): Int {
// Определяем меньший и больший индекс
var min = start
var max = destination
if (min > max) {
val temp = min
min = max
max = temp
}
var direct = 0 // Сумма расстояний по часовой стрелке
var total = 0 // Общее расстояние по кругу
for (i in distance.indices) {
total += distance[i] // Считаем общее расстояние
if (i in min until max) {
direct += distance[i] // Считаем расстояние в прямом направлении
}
}
// Выбираем минимальное расстояние между прямым и обратным маршрутом
return if (direct < total - direct) direct else total - direct
}
O(n), где n
— количество остановок.
O(1), так как используются только несколько переменных.