Sobes.tech
Intern

""" Miesta v kine sú usporiadané v jednom rade. Nový divák si vyberá miesto, aby sedel čo najďalej od ostatných divákov v rade. To znamená, že vzdialenosť od tohto miesta, kam sadne, k najbližšiemu divákovi, musí byť maximálna. Je zaručené, že v rade sú vždy 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ť (počet medzier medzi sedadlami) od zvoleného miesta k najbližšiemu divákovi. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 [0, 0, 0, 1] [1, 0, 0, 0] place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }

sobes.tech AI

Odpoveď od AI

Musíme nájsť miesto (index) s maximálnou minimálnou vzdialenosťou od najbližšieho obsadeného miesta (1). Na to prejdeme cez pole, nájdeme medzery medzi obsadenými miestami a vypočítame maximálnu vzdialenosť.

Algoritmus:

  • Prejdite rad, zapamätajte si indexy obsadených miest.
  • Zvážte tri prípady:
    1. Voľné miesta na začiatku radu až po prvé obsadené.
    2. Voľné miesta medzi dvoma obsadenými.
    3. Voľné miesta na konci radu po poslednom obsadenom.
  • Pre medzery medzi obsadenými miestami bude vzdialenosť polovica dĺžky medzery (zaokrúhlené nadol).
  • Na koncoch je vzdialenosť rovná dĺžke voľného úseku.
  • Vráťte maximálnu nájdenú vzdialenosť.

Príklad implementácie v Go:

func maxPlaces(arr []int) int {
    n := len(arr)
    maxDist := 0
    prev := -1

    for i := 0; i < n; i++ {
        if arr[i] == 1 {
            if prev == -1 {
                // Voľné miesta na začiatku
                maxDist = i
            } else {
                // Voľné miesta medzi prev a i
                dist := (i - prev) / 2
                if dist > maxDist {
                    maxDist = dist
                }
            }
            prev = i
        }
    }

    // Voľné miesta na konci
    if n-1-prev > maxDist {
        maxDist = n - 1 - prev
    }

    return maxDist
}

Tento kód vráti maximálnu vzdialenosť od najbližšieho diváka, kam sa posadí nový divák.