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