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] [1, 0, 0, 0] place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }

sobes.tech AI

Отговор от 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
}

Този код връща максималното разстояние до най-близкия зрител, където ще седне нов зрител.