Middle
/* Les places dans le cinéma sont disposées en une seule rangée. Le spectateur qui vient d'arriver choisit une place pour être aussi éloigné que possible des autres spectateurs dans la rangée. C'est-à-dire que la distance entre la place où il s'assoit 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. Écris une fonction qui, étant donné une rangée de places (un tableau de zéros et de uns), renvoie la distance depuis la place choisie. Entrée : [1, 0, 0, 0, 0, 1] Sortie : 2 Entrée : [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Sortie : 2 Entrée : [1, 0, 1, 0] Sortie : 1 */
sobes.tech IA
Réponse de l'IA
La fonction doit trouver l’emplacement (index avec zéro) où la distance au siège occupé le plus proche (un) est maximale.
Idée de la solution :
- Parcourir le tableau, pour chaque siège libre, calculer la distance au siège occupé le plus proche.
- Retourner cette distance maximale.
La méthode optimale consiste en une seule passe avec le calcul des distances aux uns les plus proches à gauche et à droite.
Exemple en Go :
func maxDistance(sieges []int) int {
n := len(sieges)
distGauche := make([]int, n)
distDroite := make([]int, n)
// Remplir les distances au siège occupé le plus proche à gauche
dist := n
for i := 0; i < n; i++ {
if sieges[i] == 1 {
dist = 0
} else {
dist++
}
distGauche[i] = dist
}
// Remplir les distances au siège occupé le plus proche à droite
dist = n
for i := n - 1; i >= 0; i-- {
if sieges[i] == 1 {
dist = 0
} else {
dist++
}
distDroite[i] = dist
}
maxDist := 0
for i := 0; i < n; i++ {
if sieges[i] == 0 {
// Distance minimale au spectateur le plus proche
d := distGauche[i]
if distDroite[i] < d {
d = distDroite[i]
}
if d > maxDist {
maxDist = d
}
}
}
return maxDist
}
Ainsi, la fonction renverra la distance maximale au spectateur le plus proche pour le siège choisi.