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 ül legalább egy néző. Írjon egy függvényt, amely a helyek sorát (nullák és egyesek tömbje) bemenetként kapva, visszaadja a kiválasztott helytől a legközelebbi nézőig tartó távolságot. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """
sobes.tech AI
Odpověď od AI
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 {
// расстояние от начала ряда до первого занятого места
maxDist = i
} else {
// расстояние между двумя занятыми местами
midDist := (i - lastOccupied) / 2
if midDist > maxDist {
maxDist = midDist
}
}
lastOccupied = i
}
}
// расстояние от последнего занятого места до конца ряда
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 }
Объяснение:
- Идём по ряду, запоминая индекс последнего занятого места.
- Для каждого занятого места считаем расстояние до предыдущего и берём половину (максимально удалённое место между ними).
- Также учитываем расстояния от начала ряда до первого занятого места и от последнего занятого места до конца ряда.
- Возвращаем максимальное из этих расстояний.