Sobes.tech
Middle

/* Locurile din cinematograf sunt aranjate într-un singur rând. Spectatorul care tocmai a sosit alege un loc pentru a sta cât mai departe de ceilalți spectatori din rând. Adică, distanța de la locul unde se așază până la cel mai apropiat spectator trebuie să fie maximă. Se garantează că există întotdeauna locuri libere și că cel puțin un spectator este deja așezat. Scrie o funcție care, pe baza unui rând de locuri (un array de zerouri și unu), va returna distanța de la locul ales. 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 */

sobes.tech AI

Răspuns de la 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
}

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