Intern
""" A mozi helyei egy sorban vannak elrendezve. Egy éppen érkező néző kiválaszt egy helyet, hogy a lehető legtávolabb üljön a többi nézőtől a sorban. Vagyis, a helytől, ahol ülni fog, a legközelebbi nézőig tartó távolságnak maximálisnak kell lennie. Garantált, hogy mindig vannak szabad helyek, és már legalább egy néző ül. Írjon egy függvényt, amely adott egy helysort (nullák és egyesek tömbje), és visszaadja a (ülések közötti számú szabad helyet) a kiválasztott helytől a legközelebbi nézőig.
sobes.tech MI
Válasz az MI-től
go package main
import ( "fmt" "math" )
func maxDistance(seats []int) int { maxDist := 0 lastOccupied := -1
for i, seat := range seats {
if seat == 1 {
if lastOccupied == -1 {
// távolság a sor elejétől az első foglalt helyig
maxDist = i
} else {
// távolság két foglalt hely között
midDist := (i - lastOccupied) / 2
if midDist > maxDist {
maxDist = midDist
}
}
lastOccupied = i
}
}
// távolság az utolsó foglalt helytől a sor végéig
tailDist := len(seats) - 1 - lastOccupied
if tailDist > maxDist {
maxDist = tailDist
}
return maxDist
}
func main() { fmt.Println(maxDistance([]int{1, 0, 0, 0, 1})) // 2 fmt.Println(maxDistance([]int{1, 0, 1, 0, 0, 1, 0, 0, 1})) // 2 fmt.Println(maxDistance([]int{1, 0, 1, 0})) // 1 }
Magyarázat:
- Átmegyünk a soron, és megjegyezzük az utolsó foglalt hely indexét.
- Minden foglalt hely esetén kiszámítjuk a távolságot az előzőhöz képest, és felezve a legmesszebb lévő helyet kapjuk.
- Figyelembe vesszük a sor elejétől az első foglalt helyig és az utolsó foglalt helytől a sor végéig mért távolságokat is.
- A legnagyobb ilyen távolságot adjuk vissza.