Intern
""" Los asientos en el cine están dispuestos en una fila. Un espectador que acaba de llegar elige un asiento, para sentarse lo más lejos posible de los demás espectadores en la fila. Es decir, la distancia desde ese asiento, que ocupará el espectador, hasta el espectador más cercano debe ser máxima. Se garantiza que siempre hay asientos libres en la fila y que ya hay al menos un espectador sentado. Escriba una función que, dada una fila de asientos (una matriz de ceros y unos), devuelva la distancia (número de espacios entre los asientos) desde el asiento elegido hasta el espectador más cercano. [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 { }
sobes.tech AI
Respuesta de la IA
Нужно найти место (индекс) с максимальным минимальным расстоянием до ближайшего занятого места (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
}
Этот код возвращает максимальное расстояние до ближайшего зрителя, куда сядет новый зритель.