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