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
Отговор от AI
Функцията maxDistants на Go изчислява максималното разстояние до най-близкия елемент със стойност 1 в масив от 0 и 1. Идеята е да се намери позицията, където може да се постави 1 така, че разстоянието до най-близкия 1 да бъде максимално.
Обяснение на логиката:
- Променливата
lastOneсъхранява индекса на последния срещнат 1. - При преминаване през масива, ако се срещне 1:
- Ако е първият 1, максималното разстояние е индексът на този 1 (разстоянието от началото).
- В противен случай, се изчислява половината от разстоянието между текущия и предишния 1 (тъй като може да се постави по средата).
- След преминаването се проверява дали има нули вдясно от последния 1 и се актуализира максималното разстояние, ако е необходимо.
Пример за използване:
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
}
Този код правилно работи за намиране на максималното разстояние до най-близкия 1, като взема предвид краищата на масива.