Intern
""" Kinoda joylashgan joylar bitta qator shaklida joylashgan. Yangi kelgan tomoshabin joyni tanlaydi, qatordagi boshqa tomoshabinlardan maksimal uzoqlikda o'tirish uchun. Ya'ni, u joydan, qaysi tomoshabin yaqin bo'lsa, unga bo'lgan masofa maksimal bo'lishi kerak. Har doim qatorda bo'sh joylar borligi va kamida bitta tomoshabin o'tirganligi kafolatlanadi. Berilgan joylar qatori (nol va birlardan iborat massiv) uchun, tanlangan joydan eng yaqin tomoshabinga bo'lgan masofani (joylar orasidagi bo'sh joylar soni) qaytaradigan funktsiya yozing. [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
AIdan javob
Чтобы найти максимальное расстояние до ближайшего зрителя, нужно рассмотреть три ситуации:
- Свободные места в начале ряда до первого занятого места.
- Свободные места в конце ряда после последнего занятого места.
- Свободные места между двумя занятыми местами — в этом случае выбираем середину промежутка.
Алгоритм:
- Пройти по ряду, найти индексы занятых мест.
- Рассчитать расстояния в начале и в конце ряда.
- Для каждого промежутка между занятыми местами вычислить половину длины промежутка (округляя вниз).
- Максимальное из этих значений и будет ответом.
Пример реализации на 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
}
Этот код возвращает максимальное расстояние до ближайшего зрителя, куда сядет новый зритель.