Intern
""" De plaatsen in de bioscoop zijn in één rij gerangschikt. Een net aangekomen kijker kiest een plek, om zo ver mogelijk van de andere kijkers in de rij te zitten. Met andere woorden, de afstand van die plek, waar de kijker gaat zitten, tot de dichtstbijzijnde kijker moet maximaal zijn. Er wordt gegarandeerd dat er altijd vrije plaatsen in de rij zijn en dat er al minstens één kijker zit. Schrijf een functie die, gegeven een rij van plaatsen (een array van nullen en enen), de afstand (het aantal tussenruimtes tussen de stoelen) teruggeeft van de gekozen plek tot de dichtstbijzijnde kijker. [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
Antwoord van 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
}
Этот код возвращает максимальное расстояние до ближайшего зрителя, куда сядет новый зритель.