Sobes.tech
Intern

""" კინოში ადგილები ერთ რიგშია განლაგებული. ახალი მაყურებელი ადგენს ადგილს, მოსახერხებლად მაქსიმალურად მოშორებით სხვა მაყურებლებს. სხვაგვარად რომ ვთქვათ, იმ ადგილიდან, სადაც ის დაჯდება, ყველაზე ახლოს მყოფ მაყურებელთან მანძილი უნდა იყოს მაქსიმალური. გაინტერესებს, რომ რიგში ყოველთვის თავისუფალი ადგილები არსებობს და უკვე მინიმუმ ერთი მაყურებელი ზის. დაწერეთ ფუნქცია, რომელიც მოცემული ადგილების რიგის (ნოლებისა და ერთების მასივი) საფუძველზე დააბრუნებს მანძილს (საკალათო შორის სივრცეების რაოდენობას) ამ ადგილიდან ყველაზე ახლოს მყოფ მაყურებელთან. [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

პასუხი 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
}

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