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
Respuesta de la IA
La función maxDistants en Go calcula la distancia máxima hasta el elemento más cercano con valor 1 en un array de 0 y 1. La idea es encontrar la posición donde se puede colocar un 1 de modo que la distancia al 1 más cercano sea máxima.
Explicación de la lógica:
- La variable
lastOneguarda el índice del último 1 encontrado. - Al recorrer el array, si se encuentra un 1:
- Si es el primer 1, la distancia máxima es el índice de ese 1 (distancia desde el inicio).
- De lo contrario, se calcula la mitad de la distancia entre el 1 actual y el anterior (ya que se puede colocar en medio).
- Después de recorrer, se verifica si hay ceros a la derecha del último 1 y se actualiza la distancia máxima si es necesario.
Ejemplo de uso:
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})) // Imprimirá 2
}
Este código funciona correctamente para encontrar la distancia máxima hasta el 1 más cercano, considerando los bordes del array.