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
}
Инчунин, функсия масофаи максималиро ба наздиктарин тамошобоб барои ҷойи интихобкарда бармегардонад.