Sobes.tech
Intern

""" Místa v kině jsou uspořádána v jednom řádku. Nově příchozí divák si vybírá místo, aby seděl co nejdále od ostatních diváků v řadě. Jinými slovy, vzdálenost od tohoto místa, kam sedne, k nejbližšímu divákovi by měla být maximální. Je zaručeno, že v řadě jsou vždy volná místa a že již sedí alespoň jeden divák. Napište funkci, která na základě daného řádku míst (pole nul a jedniček) vrátí vzdálenost (počet mezer mezi sedadly) od vybraného místa k nejbližšímu divákovi. [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 AI

Odpověď od 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
}

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