Sobes.tech
Back to questions
Middle
4

/* Места в кинотеатре расположены в один ряд. Только что пришедший зритель выбирает место, чтобы сидеть максимально далеко от остальных зрителей в ряду. То есть расстояние от того места, куда сядет зритель до ближайшего к нему зрителя должно быть максимально. Гарантируется, что в ряду всегда есть свободные места и уже сидит хотя бы один зритель. Напиши функцию, которая по заданному ряду мест (массиву из нулей и единиц) вернёт расстояние от выбранного места. Input: [1, 0, 0, 0, 0, 1] Output: 2 Input: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Output: 2 Input: [1, 0, 1, 0] Output: 1 */

Companies where asked
VKVK

Answer from AI

sobes.tech AI

Функция должна найти место (индекс с нулём), где расстояние до ближайшего занятого места (единицы) максимально.

Идея решения:

  • Пройти по массиву, для каждого свободного места вычислить расстояние до ближайшего занятого.
  • Вернуть максимальное такое расстояние.

Оптимальный способ — один проход с подсчётом расстояний до ближайших единиц слева и справа.

Пример на Go:

func maxDistance(seats []int) int {
    n := len(seats)
    leftDist := make([]int, n)
    rightDist := make([]int, n)

    // Заполняем расстояния до ближайшего занятого места слева
    dist := n
    for i := 0; i < n; i++ {
        if seats[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        leftDist[i] = dist
    }

    // Заполняем расстояния до ближайшего занятого места справа
    dist = n
    for i := n - 1; i >= 0; i-- {
        if seats[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        rightDist[i] = dist
    }

    maxDist := 0
    for i := 0; i < n; i++ {
        if seats[i] == 0 {
            // Минимальное расстояние до ближайшего зрителя
            d := leftDist[i]
            if rightDist[i] < d {
                d = rightDist[i]
            }
            if d > maxDist {
                maxDist = d
            }
        }
    }

    return maxDist
}

Так функция вернёт максимальное расстояние до ближайшего зрителя для выбранного места.