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ě. To znamená, že vzdálenost od tohoto místa, kam sedne, k nejbližšímu divákovi, musí 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 řady míst (pole nul a jedniček) vrátí vzdálenost (počet mezer mezi sedadly) od zvolené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] [1, 0, 0, 0] place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }

sobes.tech AI

Odpověď od AI

Нужно найти место (индекс) с максимальным минимальным расстоянием до ближайшего занятого места (1). Для этого пройдём по массиву, найдя промежутки между занятыми местами, и вычислим максимальное расстояние.

Алгоритм:

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

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

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

    for i := 0; i < n; i++ {
        if arr[i] == 1 {
            if prev == -1 {
                // Свободные места в начале
                maxDist = i
            } else {
                // Свободные места между prev и i
                dist := (i - prev) / 2
                if dist > maxDist {
                    maxDist = dist
                }
            }
            prev = i
        }
    }

    // Свободные места в конце
    if n-1-prev > maxDist {
        maxDist = n - 1 - prev
    }

    return maxDist
}

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