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:
- Voľné miesta na začiatku radu až po prvé obsadené.
- Voľné miesta medzi dvoma obsadenými.
- 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.