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
Antwoord van AI
De functie maxDistants in Go berekent de maximale afstand tot het dichtstbijzijnde element met waarde 1 in een array van 0 en 1. Het idee is om de positie te vinden waar je een 1 kunt plaatsen zodat de afstand tot de dichtstbijzijnde 1 maximaal is.
Uitleg van de logica:
- De variabele
lastOnebewaart de index van de laatst gevonden 1. - Tijdens het doorlopen van de array, als er een 1 wordt gevonden:
- Als dit de eerste 1 is, is de maximale afstand de index van die 1 (afstand vanaf het begin).
- Anders wordt de helft van de afstand tussen de huidige en de vorige 1 berekend (omdat je er in het midden kunt plaatsen).
- Na het doorlopen wordt gecontroleerd of er nullen rechts van de laatste 1 zijn en wordt de maximale afstand indien nodig bijgewerkt.
Voorbeeld van gebruik:
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})) // 2
}
Deze code werkt correct om de maximale afstand tot de dichtstbijzijnde 1 te vinden, rekening houdend met de randen van de array.