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.