Middle
/* A mozikban lévő helyek egy sorban vannak elhelyezve. Az éppen érkező néző olyan helyet választ, ahol a lehető legtávolabb ülhet a többi nézőtől a sorban. Vagyis a helytől, ahol ül, a legközelebbi nézőig mért távolságnak maximálisnak kell lennie. Biztosított, hogy mindig vannak szabad helyek, és már legalább egy néző ül. Írj egy függvényt, amely a megadott helysor (nullák és egyek tömbje) alapján visszaadja a kiválasztott helytől mért távolságot. Bemenet: [1, 0, 0, 0, 0, 1] Kimenet: 2 Bemenet: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Kimenet: 2 Bemenet: [1, 0, 1, 0] Kimenet: 1 */
sobes.tech MI
Válasz az MI-től
A funkciónak meg kell találnia azt a helyet (nullával jelölt indexet), ahol a legnagyobb a távolság a legközelebbi foglalt helyhez (egyhez).
A megoldás ötlete:
- Végig kell menni a tömbön, minden szabad helyhez kiszámolni a legközelebbi foglalt hely távolságát.
- Vissza kell adni ezt a maximális távolságot.
Optimális módszer: egyetlen áthaladás a bal és jobb oldali legközelebbi egyek számításával.
Példa Go nyelven:
func maxDistance(helyek []int) int {
n := len(helyek)
balDist := make([]int, n)
jobbDist := make([]int, n)
// Kitöltjük a távolságokat a legközelebbi foglalt helyhez balra
dist := n
for i := 0; i < n; i++ {
if helyek[i] == 1 {
dist = 0
} else {
dist++
}
balDist[i] = dist
}
// Kitöltjük a távolságokat a legközelebbi foglalt helyhez jobbra
dist = n
for i := n - 1; i >= 0; i-- {
if helyek[i] == 1 {
dist = 0
} else {
dist++
}
jobbDist[i] = dist
}
maxDist := 0
for i := 0; i < n; i++ {
if helyek[i] == 0 {
// Minimális távolság a legközelebbi nézőhöz
d := balDist[i]
if jobbDist[i] < d {
d = jobbDist[i]
}
if d > maxDist {
maxDist = d
}
}
}
return maxDist
}
Így a függvény visszaadja a maximális távolságot a legközelebbi nézőhöz a kiválasztott helyen.