Back to questions
Intern
4
""" Места в кинотеатре расположены в один ряд. Только что пришедший зритель выбирает место, чтобы сидеть максимально далеко от остальных зрителей в ряду. То есть расстояние от того места, куда сядет зритель до ближайшего к нему зрителя должно быть максимально. Гарантируется, что в ряду всегда есть свободные места и уже сидит хотя бы один зритель. Напишите функцию, которая по заданному ряду мест (массиву из нулей и единиц) вернёт расстояние (число промежутков между креслами) от выбранного места до ближайшего зрителя. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 [0, 0, 0, 1] [1, 0, 0, 0] place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }
Companies where asked
Яндекс
Answer from AI
sobes.tech AI
Нужно найти место (индекс) с максимальным минимальным расстоянием до ближайшего занятого места (1). Для этого пройдём по массиву, найдя промежутки между занятыми местами, и вычислим максимальное расстояние.
Алгоритм:
- Пройти по ряду, запоминая индексы занятых мест.
- Рассмотреть три случая:
- Свободные места в начале ряда до первого занятого.
- Свободные места между двумя занятыми.
- Свободные места в конце ряда после последнего занятого.
- Для промежутков между занятыми местами расстояние будет половиной длины промежутка (округлённой вниз).
- Для концов — расстояние равно длине свободного участка.
- Вернуть максимальное найденное расстояние.
Пример реализации на Go:
func maxPlaces(arr []int) int {
n := len(arr)
maxDist := 0
prev := -1
for i := 0; i < n; i++ {
if arr[i] == 1 {
if prev == -1 {
// Свободные места в начале
maxDist = i
} else {
// Свободные места между prev и i
dist := (i - prev) / 2
if dist > maxDist {
maxDist = dist
}
}
prev = i
}
}
// Свободные места в конце
if n-1-prev > maxDist {
maxDist = n - 1 - prev
}
return maxDist
}
Этот код возвращает максимальное расстояние до ближайшего зрителя, куда сядет новый зритель.