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 KI
Antwort von AI
Die Funktion maxDistants in Go berechnet die maximale Entfernung zum nächsten Element mit dem Wert 1 in einem Array aus 0 und 1. Die Idee ist, die Position zu finden, an der man eine 1 platzieren kann, sodass die Entfernung zur nächsten 1 maximal ist.
Erläuterung der Logik:
- Die Variable
lastOnespeichert den Index des letzten gefundenen 1. - Beim Durchlaufen des Arrays, wenn eine 1 gefunden wird:
- Wenn es die erste 1 ist, ist die maximale Entfernung der Index dieser 1 (Entfernung vom Anfang).
- Andernfalls berechnet man die Hälfte der Entfernung zwischen der aktuellen und der vorherigen 1 (da man sie in der Mitte platzieren kann).
- Nach dem Durchlauf überprüft man, ob rechts vom letzten 1 Nullen sind, und aktualisiert die maximale Entfernung bei Bedarf.
Beispiel für die Verwendung:
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})) // Gibt 2 aus
}
Dieser Code funktioniert korrekt, um die maximale Entfernung zum nächsten 1 zu finden, wobei die Ränder des Arrays berücksichtigt werden.