Sobes.tech
Intern

""" Les places dans le cinéma sont disposées en une seule rangée. Un spectateur qui vient d'arriver choisit une place, pour s'asseoir aussi loin que possible des autres spectateurs dans la rangée. Autrement dit, la distance entre la place, où le spectateur s'assiéra, et le spectateur le plus proche doit être maximale. Il est garanti qu'il y a toujours des places libres dans la rangée et qu'au moins un spectateur est déjà assis. Écrivez une fonction qui, étant donné une rangée de places (un tableau de zéros et de uns), renvoie la distance (nombre d'espaces entre les sièges) entre la place choisie et le spectateur le plus proche. [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 IA

Réponse de l'IA

Нужно найти место (индекс) с максимальным минимальным расстоянием до ближайшего занятого места (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
}

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