Middle
import "fmt" func maxDistants(arr []int) int { maxDist := 0 lastOne := -1 for i := 0; i < len(arr); i++ { if arr[i] == 1 { if lastOne == -1 { maxDist = i } else { dist := (i - lastOne) / 2 if dist > maxDist { maxDist = dist } } lastOne = i } } if arr[len(arr)-1] == 0 { dist := len(arr) - 1 - lastOne if dist > maxDist { maxDist = dist } } return maxDist } func main() { fmt.Println(maxDistants([]int{1, 0, 0, 0, 1})) }
sobes.tech IA
Réponse de l'IA
La fonction maxDistants en Go calcule la distance maximale jusqu'à l'élément le plus proche avec la valeur 1 dans un tableau de 0 et 1. L'idée est de trouver la position où l'on peut placer un 1 de manière à maximiser la distance jusqu'au 1 le plus proche.
Explication de la logique :
- La variable
lastOnestocke l'indice du dernier 1 rencontré. - En parcourant le tableau, si un 1 est rencontré :
- Si c'est le premier 1, la distance maximale est l'indice de ce 1 (distance depuis le début).
- Sinon, on calcule la moitié de la distance entre le 1 actuel et le précédent (car on peut le placer au milieu).
- Après le parcours, on vérifie s'il y a des zéros à droite du dernier 1 et on met à jour la distance maximale si nécessaire.
Exemple d'utilisation :
package main
import "fmt"
func maxDistants(arr []int) int {
maxDist := 0
lastOne := -1
for i := 0; i < len(arr); i++ {
if arr[i] == 1 {
if lastOne == -1 {
maxDist = i
} else {
dist := (i - lastOne) / 2
if dist > maxDist {
maxDist = dist
}
}
lastOne = i
}
}
if arr[len(arr)-1] == 0 {
dist := len(arr) - 1 - lastOne
if dist > maxDist {
maxDist = dist
}
}
return maxDist
}
func main() {
fmt.Println(maxDistants([]int{1, 0, 0, 0, 1})) // Affichera 2
}
Ce code fonctionne correctement pour rechercher la distance maximale jusqu'au 1 le plus proche, en tenant compte des extrémités du tableau.