Sobes.tech
Intern

""" Die Plätze im Kino sind in einer Reihe angeordnet. Ein neu ankommender Zuschauer wählt einen Platz, um so weit wie möglich von den anderen Zuschauern in der Reihe zu sitzen. Das heißt, die Entfernung von dem Platz, den der Zuschauer einnimmt, bis zum nächsten Zuschauer soll maximal sein. Es ist garantiert, dass in der Reihe immer freie Plätze vorhanden sind und mindestens ein Zuschauer bereits sitzt. Schreiben Sie eine Funktion, die anhand einer Reihe von Plätzen (ein Array aus Nullen und Einsen) die Entfernung (Anzahl der Zwischenräume zwischen den Sitzen) vom gewählten Platz bis zum nächsten Zuschauer zurückgibt. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 [0, 0, 0, 1] -> 3 [1, 0, 0, 0] -> 3 place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }

sobes.tech KI

Antwort von AI

Чтобы найти максимальное расстояние до ближайшего зрителя, нужно рассмотреть три ситуации:

  1. Свободные места в начале ряда до первого занятого места.
  2. Свободные места в конце ряда после последнего занятого места.
  3. Свободные места между двумя занятыми местами — в этом случае выбираем середину промежутка.

Алгоритм:

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

Пример реализации на Go:

func maxPlaces(arr []int) int {
    n := len(arr)
    left := -1
    maxDist := 0

    // Найдем первое занятое место
    for i, seat := range arr {
        if seat == 1 {
            left = i
            maxDist = left // расстояние от начала ряда
            break
        }
    }

    // Пройдем по ряду, чтобы найти максимальное расстояние между занятыми местами
    for i := left + 1; i < n; i++ {
        if arr[i] == 1 {
            dist := (i - left) / 2
            if dist > maxDist {
                maxDist = dist
            }
            left = i
        }
    }

    // Проверим расстояние от последнего занятого места до конца ряда
    if n-1-left > maxDist {
        maxDist = n - 1 - left
    }

    return maxDist
}

Этот код возвращает максимальное расстояние до ближайшего зрителя, куда сядет новый зритель.