Sobes.tech
Назад к вопросам
Intern
5

func maxPlaces(arr []int) int { maxDistance := 0 prev, first := -1, -1 for i := 0; i < len(arr); i++ { if arr[i] == 1 { if first == -1 { first = i maxDistance = max(maxDistance, i) } else { maxDistance = max(maxDistance, (i - prev) / 2) } prev = i } } maxDistance = max(maxDistance, len(arr) - 1 - prev) return maxDistance }

Компании, где спрашивали
Яндекс

Ответ от нейросети

sobes.tech AI

Функция maxPlaces на Go вычисляет максимальное расстояние до ближайшего элемента со значением 1 в массиве из 0 и 1.

Идея алгоритма:

  • Перебираем массив, запоминая индексы элементов со значением 1.
  • Для первого найденного 1 считаем расстояние от начала массива до неё.
  • Для последующих 1 считаем половину расстояния между текущим и предыдущим индексов 1 (т.к. оптимальное место для посадки будет посередине).
  • В конце учитываем расстояние от последнего 1 до конца массива.

Пример:

type intSlice []int

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

func maxPlaces(arr []int) int {
    maxDistance := 0
    prev, first := -1, -1
    for i := 0; i < len(arr); i++ {
        if arr[i] == 1 {
            if first == -1 {
                first = i
                maxDistance = max(maxDistance, i) // расстояние от начала
            } else {
                maxDistance = max(maxDistance, (i - prev) / 2) // половина расстояния между 1
            }
            prev = i
        }
    }
    maxDistance = max(maxDistance, len(arr) - 1 - prev) // расстояние до конца
    return maxDistance
}

Таким образом, функция находит максимально возможное расстояние до ближайшего занятого места (1) для посадки.