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] -> 3 [1, 0, 0, 0] -> 3 place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }
sobes.tech AI
Պատասխան AI-ից
Чтобы найти максимальное расстояние до ближайшего зрителя, нужно рассмотреть три ситуации:
- Свободные места в начале ряда до первого занятого места.
- Свободные места в конце ряда после последнего занятого места.
- Свободные места между двумя занятыми местами — в этом случае выбираем середину промежутка.
Алгоритм:
- Пройти по ряду, найти индексы занятых мест.
- Рассчитать расстояния в начале и в конце ряда.
- Для каждого промежутка между занятыми местами вычислить половину длины промежутка (округляя вниз).
- Максимальное из этих значений и будет ответом.
Пример реализации на 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
}
Этот код возвращает максимальное расстояние до ближайшего зрителя, куда сядет новый зритель.