Intern
""" Kino salės vietos išdėstytos vienoje eilėje. Naujas žiūrovas ką tik atvyksta ir pasirenka vietą, kad sėdėtų kuo toliau nuo kitų žiūrovų eilėje. Kitaip tariant, atstumas nuo tos vietos, iki artimiausio žiūrovo, turi būti maksimalus. Garantuojama, kad visada yra laisvų vietų ir jau sėdi bent vienas žiūrovas. Parašykite funkciją, kuri, duodama vietų eilę (masyvą iš nulio ir vieno), grąžins atstumą (erdvės skaičių tarp sėdynių) nuo pasirinktos vietos iki artimiausio žiūrovo. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """
sobes.tech AI
Atsakymas iš 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 {
// atstumas nuo pradžios iki pirmojo užimto vietos
maxDist = i
} else {
// atstumas tarp dviejų užimtų vietų
midDist := (i - lastOccupied) / 2
if midDist > maxDist {
maxDist = midDist
}
}
lastOccupied = i
}
}
// atstumas nuo paskutinės užimtos vietos iki eilės pabaigos
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 }
Paaiškinimas:
- Mes einame per eilę ir prisimename paskutinės užimtos vietos indeksą.
- Kiekvienai užimtai vietai skaičiuojame atstumą iki ankstesnės ir imame pusę (labiausiai nutolusios vietos tarp jų).
- Taip pat atsižvelgiame į atstumus nuo pradžios iki pirmos užimtos vietos ir nuo paskutinės užimtos vietos iki eilės pabaigos.
- Grąžiname didžiausią iš šių atstumų.