Intern
""" Kinoteātra vietas ir izvietotas vienā rindā. Jauns apmeklētājs, kurš tikko ieradies, izvēlas vietu, lai sēdētu pēc iespējas tālāk no citiem apmeklētājiem rindā. Tas ir, attālums no šīs vietas, līdz tuvākajam apmeklētājam, ir jābūt maksimālam. Tiek garantēts, ka vienmēr ir brīvas vietas un jau ir sēdējis vismaz viens apmeklētājs. Uzrakstiet funkciju, kas, dodot vietu rindu (masīvu no nullēm un vieniniekiem), atgriezīs attālumu (skaitu starp sēdvietām) no izvēlētās vietas līdz tuvākajam apmeklētājam. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """
sobes.tech AI
Atbilde no 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 {
// attālums no sākuma līdz pirmajai aizņemtajai vietai
maxDist = i
} else {
// attālums starp divām aizņemtajām vietām
midDist := (i - lastOccupied) / 2
if midDist > maxDist {
maxDist = midDist
}
}
lastOccupied = i
}
}
// attālums no pēdējās aizņemtās vietas līdz rindas beigām
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 }
Aprašymas:
- Eikime per eilę ir atsiminkite paskutinės užimtos vietos indeksą.
- Kiekvienai užimtai vietai apskaičiuokite atstumą iki ankstesnės ir paimkite pusę (labiausiai nutolusios vietos tarp jų).
- Taip pat atsižvelkite į atstumus nuo pradžios iki pirmos užimtos vietos ir nuo paskutinės užimtos vietos iki eilės pabaigos.
- Grąžinkite didžiausią iš šių atstumų.