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 MI
Válasz az MI-től
A maxDistants függvény Go-ban kiszámítja a maximális távolságot a legközelebbi 1-es elemhez egy 0 és 1-ből álló tömbben. Az ötlet az, hogy megtaláljuk azt a pozíciót, ahol egy 1-et elhelyezve a lehető legnagyobb távolság legyen a legközelebbi 1-től.
A logika magyarázata:
- A
lastOneváltozó tárolja az utoljára talált 1 indexét. - A tömbön való végigiterálás során, ha 1-et találunk:
- Ha ez az első 1, akkor a maximális távolság az adott 1 indexe (a tömb elejétől).
- Egyébként, a jelenlegi és az előző 1 közötti távolság felét számoljuk (mivel középre lehet elhelyezni).
- A végén ellenőrizzük, hogy van-e nullák a legutóbbi 1 jobb oldalán, és szükség esetén frissítjük a maximális távolságot.
Használati példa:
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
}
Ez a kód helyesen működik a legnagyobb távolság megtalálására a legközelebbi 1-hez, figyelembe véve a tömb szélét.