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
}

Այսպիսով, ֆունկցիան կվերադարձնի առավելագույն հեռավորությունը մոտակա դիտորդից ընտրված տեղում: