Назад к вопросам
VK
Middle
6
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
Функция 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, учитывая края массива.