Back to questions
VK
Middle
4
/* Места в кинотеатре расположены в один ряд. Только что пришедший зритель выбирает место, чтобы сидеть максимально далеко от остальных зрителей в ряду. То есть расстояние от того места, куда сядет зритель до ближайшего к нему зрителя должно быть максимально. Гарантируется, что в ряду всегда есть свободные места и уже сидит хотя бы один зритель. Напиши функцию, которая по заданному ряду мест (массиву из нулей и единиц) вернёт расстояние от выбранного места. Input: [1, 0, 0, 0, 0, 1] Output: 2 Input: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Output: 2 Input: [1, 0, 1, 0] Output: 1 */
Companies where asked
Answer from AI
sobes.tech AI
Функция должна найти место (индекс с нулём), где расстояние до ближайшего занятого места (единицы) максимально.
Идея решения:
- Пройти по массиву, для каждого свободного места вычислить расстояние до ближайшего занятого.
- Вернуть максимальное такое расстояние.
Оптимальный способ — один проход с подсчётом расстояний до ближайших единиц слева и справа.
Пример на Go:
func maxDistance(seats []int) int {
n := len(seats)
leftDist := make([]int, n)
rightDist := make([]int, n)
// Заполняем расстояния до ближайшего занятого места слева
dist := n
for i := 0; i < n; i++ {
if seats[i] == 1 {
dist = 0
} else {
dist++
}
leftDist[i] = dist
}
// Заполняем расстояния до ближайшего занятого места справа
dist = n
for i := n - 1; i >= 0; i-- {
if seats[i] == 1 {
dist = 0
} else {
dist++
}
rightDist[i] = dist
}
maxDist := 0
for i := 0; i < n; i++ {
if seats[i] == 0 {
// Минимальное расстояние до ближайшего зрителя
d := leftDist[i]
if rightDist[i] < d {
d = rightDist[i]
}
if d > maxDist {
maxDist = d
}
}
}
return maxDist
}
Так функция вернёт максимальное расстояние до ближайшего зрителя для выбранного места.