Intern
""" Les sièges dans une salle de cinéma sont alignés en une seule rangée. Un spectateur qui vient d'arriver choisit une place, pour s'asseoir aussi loin que possible des autres spectateurs dans la rangée. Autrement dit, la distance entre cette place, et le spectateur le plus proche doit être maximale. Il est garanti qu'il y a toujours des places libres et qu'au moins un spectateur est déjà assis. Écrivez une fonction qui, étant donné une rangée de places (un tableau de zéros et de uns), renvoie la distance (nombre d'espaces entre les sièges) entre la place choisie et le spectateur le plus proche. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """
sobes.tech IA
Réponse de l'IA
go package main
import ( "fmt" "math" )
func maxDistance(seats []int) int { maxDist := 0 lastOccupied := -1
for i, seat := range seats {
if seat == 1 {
if lastOccupied == -1 {
// расстояние от начала ряда до первого занятого места
maxDist = i
} else {
// расстояние между двумя занятыми местами
midDist := (i - lastOccupied) / 2
if midDist > maxDist {
maxDist = midDist
}
}
lastOccupied = i
}
}
// расстояние от последнего занятого места до конца ряда
tailDist := len(seats) - 1 - lastOccupied
if tailDist > maxDist {
maxDist = tailDist
}
return maxDist
}
func main() { fmt.Println(maxDistance([]int{1, 0, 0, 0, 1})) // 2 fmt.Println(maxDistance([]int{1, 0, 1, 0, 0, 1, 0, 0, 1})) // 2 fmt.Println(maxDistance([]int{1, 0, 1, 0})) // 1 }
Объяснение:
- Идём по ряду, запоминая индекс последнего занятого места.
- Для каждого занятого места считаем расстояние до предыдущего и берём половину (максимально удалённое место между ними).
- Также учитываем расстояния от начала ряда до первого занятого места и от последнего занятого места до конца ряда.
- Возвращаем максимальное из этих расстояний.