Sobes.tech
Middle

/* Miesta v kine sú usporiadané v jednom rade. Divák, ktorý práve prišiel, si vyberá miesto tak, aby sedel čo najďalej od ostatných divákov v rade. To znamená, že vzdialenosť od miesta, kam si sadne, k najbližšiemu divákovi, by mala byť maximálna. Je zaručené, že vždy sú voľné miesta a že už sedí aspoň jeden divák. Napíšte funkciu, ktorá na základe daného radu miest (pole núl a jednotiek) vráti vzdialenosť od vybraného miesta. Vstup: [1, 0, 0, 0, 0, 1] Výstup: 2 Vstup: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Výstup: 2 Vstup: [1, 0, 1, 0] Výstup: 1 */

sobes.tech AI

Odpoveď od AI

Funkcia by mala nájsť miesto (index s nulou), kde je vzdialenosť k najbližšiemu obsadenému miestu (s jednotkami) maximálna.

Myšlienka riešenia:

  • Prejsť cez pole, pre každé voľné miesto vypočítať vzdialenosť k najbližšiemu obsadenému.
  • Vrátiť túto maximálnu vzdialenosť.

Optimálny spôsob je jeden prechod s počítaním vzdialeností k najbližším jednotkám vľavo a vpravo.

Príklad v Go:

func maxDistance(sedadla []int) int {
    n := len(sedadla)
    lavaDist := make([]int, n)
    pravaDist := make([]int, n)

    // Vyplniť vzdialenosti k najbližšiemu obsadenému miestu vľavo
    dist := n
    for i := 0; i < n; i++ {
        if sedadla[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        lavaDist[i] = dist
    }

    // Vyplniť vzdialenosti k najbližšiemu obsadenému miestu vpravo
    dist = n
    for i := n - 1; i >= 0; i-- {
        if sedadla[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        pravaDist[i] = dist
    }

    maxDist := 0
    for i := 0; i < n; i++ {
        if sedadla[i] == 0 {
            // Minimálna vzdialenosť k najbližšiemu divákovi
            d := lavaDist[i]
            if pravaDist[i] < d {
                d = pravaDist[i]
            }
            if d > maxDist {
                maxDist = d
            }
        }
    }

    return maxDist
}

Takto funkcia vráti maximálnu vzdialenosť k najbližšiemu divákovi pre vybrané miesto.