Sobes.tech
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.