Middle
/* Места у биоскопу су распоређена у једном реду. Гледалац који је управо стигао бира место да седи што даље од осталих гледалаца у реду. То јест, растојање од места на које ће седети до најближе гледаоца треба да буде максимално. Гарантовано је да увек постоје слободна места и да већ седи бар један гледалац. Напишите функцију која, на основу датог реда места (низ нула и јединица), враћа растојање од изабраног места. Улаз: [1, 0, 0, 0, 0, 1] Излаз: 2 Улаз: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Излаз: 2 Улаз: [1, 0, 1, 0] Излаз: 1 */
sobes.tech АИ
Одговор од АИ
Функция должна найти место (индекс с нулём), где расстояние до ближайшего занятого места (единицы) максимально.
Идея решения:
- Пройти по массиву, для каждого свободного места вычислить расстояние до ближайшего занятого.
- Вернуть максимальное такое расстояние.
Оптимальный способ — один проход с подсчётом расстояний до ближайших единиц слева и справа.
Пример на 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
}
Так функция вернёт максимальное расстояние до ближайшего зрителя для выбранного места.