Intern
""" Кинотеатрдагы орундар бир сапта жайгашкан. Жаңы келген көрүүчү орун тандайт, системеден эң алыс отуруу үчүн. Демек, отурган орундан, аларга эң жакын көрүүчүгө чейинки аралык максималдуу болушу керек. Ар дайым орун бош экендиги жана кеминде бир көрүүчү отургандыгы кепилденет. Берилген орундар саптары (нөлдөр жана бирлердин массиви) үчүн, тандалган орундан эң жакын көрүүчүгө чейинки аралыкты (орундар арасындагы аралык санын) кайтарган функция жазгыла. [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
AIден жооп
Нужно найти место (индекс) с максимальным минимальным расстоянием до ближайшего занятого места (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
}
Этот код возвращает максимальное расстояние до ближайшего зрителя, куда сядет новый зритель.