Назад к вопросам
Intern
3
""" Места в кинотеатре расположены в один ряд. Только что пришедший зритель выбирает место, чтобы сидеть максимально далеко от остальных зрителей в ряду. То есть расстояние от того места, куда сядет зритель до ближайшего к нему зрителя должно быть максимально. Гарантируется, что в ряду всегда есть свободные места и уже сидит хотя бы один зритель. Напишите функцию, которая по заданному ряду мест (массиву из нулей и единиц) вернёт расстояние (число промежутков между креслами) от выбранного места до ближайшего зрителя. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """ func maxPlaces(arr []int) int { }
Компании, где спрашивали
Яндекс
Ответ от нейросети
sobes.tech AI
Для решения задачи нужно найти такое свободное место (0), у которого минимальное расстояние до ближайшего занятого места (1) максимально.
Алгоритм:
- Пройти по массиву и запомнить индексы занятых мест.
- Для каждого свободного места вычислить расстояние до ближайшего занятого места.
- Вернуть максимальное из таких расстояний.
Пример реализации на Go:
func maxPlaces(arr []int) int {
occupied := []int{}
for i, v := range arr {
if v == 1 {
occupied = append(occupied, i)
}
}
maxDist := 0
for i, v := range arr {
if v == 0 {
// Найти минимальное расстояние до любого занятого места
minDist := len(arr)
for _, occ := range occupied {
d := i - occ
if d < 0 {
d = -d
}
if d < minDist {
minDist = d
}
}
if minDist > maxDist {
maxDist = minDist
}
}
}
return maxDist
}
Пример:
fmt.Println(maxPlaces([]int{1, 0, 0, 0, 1})) // 2
fmt.Println(maxPlaces([]int{1, 0, 1, 0, 0, 1, 0, 0, 0, 1})) // 2
fmt.Println(maxPlaces([]int{1, 0, 1, 0})) // 1