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
AIdan javob
Go'dagi maxDistants funksiyasi 0 va 1 dan iborat massivda eng yaqin 1 gacha bo'lgan maksimal masofani hisoblaydi. G'oyasi, 1 ni joylashtirish mumkin bo'lgan pozitsiyani topishdir, shunda eng yaqin 1 ga bo'lgan masofa maksimal bo'ladi.
Mantiqni tushuntirish:
lastOneo'zgaruvchisi oxirgi uchragan 1 ning indeksini saqlaydi.- Massiv bo'ylab yurib, agar 1 uchrasa:
- Agar bu birinchi 1 bo'lsa, maksimal masofa bu 1 ning indeksi (boshlang'ichdan masofa).
- Aks holda, hozirgi va oldingi 1 orasidagi masofaning yarmini hisoblaymiz (o'rta joylashish mumkin).
- Yurishdan so'ng, oxirgi 1 ning o'ngida nolalar bor-yo'qligini tekshiramiz va kerak bo'lsa maksimal masofani yangilaymiz.
Foydalanish misoli:
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
}
Ushbu kod massivning chekkalarini hisobga olib, eng yaqin 1 ga bo'lgan maksimal masofani to'g'ri aniqlaydi.