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
Răspuns de la AI
Funcția maxDistants în Go calculează distanța maximă până la elementul cel mai apropiat cu valoarea 1 într-un array format din 0 și 1. Ideea este de a găsi poziția în care se poate plasa un 1 astfel încât distanța până la cel mai apropiat 1 să fie maximă.
Explicație a logicii:
- Variabila
lastOnepăstrează indexul ultimului 1 întâlnit. - Parcurgând array-ul, dacă se întâlnește un 1:
- Dacă este primul 1, distanța maximă este indexul acelui 1 (distanța de la început).
- Altfel, se calculează jumătate din distanța dintre 1-ul curent și cel anterior (deoarece se poate plasa în mijloc).
- După parcurgere, se verifică dacă există zerouri la dreapta ultimului 1 și se actualizează distanța maximă dacă este nevoie.
Exemplu de utilizare:
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
}
Acest cod funcționează corect pentru a găsi distanța maximă până la cel mai apropiat 1, luând în considerare marginile array-ului.