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
}

Инчунин, функсия масофаи максималиро ба наздиктарин тамошобоб барои ҷойи интихобкарда бармегардонад.