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] -> 3 [1, 0, 0, 0] -> 3 place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }
sobes.tech AI
Respuesta de la IA
Чтобы найти максимальное расстояние до ближайшего зрителя, нужно рассмотреть три ситуации:
- Свободные места в начале ряда до первого занятого места.
- Свободные места в конце ряда после последнего занятого места.
- Свободные места между двумя занятыми местами — в этом случае выбираем середину промежутка.
Алгоритм:
- Пройти по ряду, найти индексы занятых мест.
- Рассчитать расстояния в начале и в конце ряда.
- Для каждого промежутка между занятыми местами вычислить половину длины промежутка (округляя вниз).
- Максимальное из этих значений и будет ответом.
Пример реализации на Go:
func maxPlaces(arr []int) int {
n := len(arr)
left := -1
maxDist := 0
// Найдем первое занятое место
for i, seat := range arr {
if seat == 1 {
left = i
maxDist = left // расстояние от начала ряда
break
}
}
// Пройдем по ряду, чтобы найти максимальное расстояние между занятыми местами
for i := left + 1; i < n; i++ {
if arr[i] == 1 {
dist := (i - left) / 2
if dist > maxDist {
maxDist = dist
}
left = i
}
}
// Проверим расстояние от последнего занятого места до конца ряда
if n-1-left > maxDist {
maxDist = n - 1 - left
}
return maxDist
}
Этот код возвращает максимальное расстояние до ближайшего зрителя, куда сядет новый зритель.