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 AI
Risposta dell'AI
La funzione maxDistants in Go calcola la distanza massima fino all'elemento più vicino con valore 1 in un array di 0 e 1. L'idea è trovare la posizione in cui si può mettere un 1 in modo che la distanza dal 1 più vicino sia massima.
Spiegazione della logica:
- La variabile
lastOnememorizza l'indice dell'ultimo 1 incontrato. - Durante l'iterazione sull'array, se si incontra un 1:
- Se è il primo 1, la distanza massima è l'indice di quel 1 (distanza dall'inizio).
- Altrimenti, si calcola la metà della distanza tra il 1 corrente e il precedente (poiché si può posizionarlo a metà strada).
- Dopo aver attraversato l'array, si verifica se ci sono zeri a destra dell'ultimo 1 e si aggiorna la distanza massima se necessario.
Esempio di utilizzo:
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})) // Stampa 2
}
Questo codice funziona correttamente per trovare la distanza massima fino al 1 più vicino, considerando i bordi dell'array.