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
Resposta da IA
A função maxDistants em Go calcula a distância máxima até ao elemento mais próximo com valor 1 num array de 0 e 1. A ideia é encontrar a posição onde se pode colocar um 1 de modo a que a distância ao 1 mais próximo seja máxima.
Explicação da lógica:
- A variável
lastOneguarda o índice do último 1 encontrado. - Ao percorrer o array, se encontrar um 1:
- Se for o primeiro 1, a distância máxima é o índice desse 1 (distância desde o início).
- Caso contrário, calcula-se a metade da distância entre o 1 atual e o anterior (pois pode-se colocá-lo no meio).
- Após percorrer, verifica-se se há zeros à direita do último 1 e atualiza-se a distância máxima, se necessário.
Exemplo 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})) // Vai imprimir 2
}
Este código funciona corretamente para encontrar a distância máxima até ao 1 mais próximo, considerando as extremidades do array.