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
}
Այսպիսով, ֆունկցիան կվերադարձնի առավելագույն հեռավորությունը մոտակա դիտորդից ընտրված տեղում: