Sobes.tech
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.