Sobes.tech
Middle

/* Местата в киното са разположени в един ред. Публиката, която току-що е пристигнала, избира място, за да седне максимално далеч от останалите зрители в реда. Това означава, че разстоянието от мястото, на което ще седне, до най-близкия зрител, трябва да бъде максимално. Гарантира се, че винаги има свободни места и че вече има поне един зрител. Напишете функция, която по даден ред места (масив от нули и единици) ще върне разстоянието от избраното място. Вход: [1, 0, 0, 0, 0, 1] Изход: 2 Вход: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Изход: 2 Вход: [1, 0, 1, 0] Изход: 1 */

sobes.tech AI

Отговор от AI

Функцията трябва да намери място (индекс с нула), където разстоянието до най-близкото заето място (единици) е максимално.

Идея за решение:

  • Обходете масива, за всяко свободно място изчислете разстоянието до най-близкото заето място.
  • Върнете това максимално разстояние.

Оптималният начин е един проход с броене на разстоянията до най-близките единици наляво и надясно.

Пример на Go:

func maxDistance(seats []int) int {
    n := len(seats)
    leftDist := make([]int, n)
    rightDist := make([]int, n)

    // Запълваме разстоянията до най-близкото заето място наляво
    dist := n
    for i := 0; i < n; i++ {
        if seats[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        leftDist[i] = dist
    }

    // Запълваме разстоянията до най-близкото заето място надясно
    dist = n
    for i := n - 1; i >= 0; i-- {
        if seats[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        rightDist[i] = dist
    }

    maxDist := 0
    for i := 0; i < n; i++ {
        if seats[i] == 0 {
            // Минимално разстояние до най-близкия зрител
            d := leftDist[i]
            if rightDist[i] < d {
                d = rightDist[i]
            }
            if d > maxDist {
                maxDist = d
            }
        }
    }

    return maxDist
}

По този начин функцията ще върне максималното разстояние до най-близкия зрител за избраното място.