Sobes.tech
Intern

""" Miesta v kine sú usporiadané v jednom rade. Nový divák, ktorý práve prišiel, si vyberá miesto, aby sedel čo najďalej od ostatných divákov v rade. To znamená, že vzdialenosť od tohto miesta, po ktorom bude sedieť, k najbližšiemu divákovi, musí byť maximálna. Je zaručené, že vždy sú voľné miesta a že už sedí aspoň jeden divák. Napíšte funkciu, ktorá na základe zadaného radu miest (pole nul a jednotiek) vráti vzdialenosť (počet medzier medzi sedadlami) od vybraného miesta k najbližšiemu divákovi. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

sobes.tech AI

Odpoveď 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 {
			// vzdialenosť od začiatku radu po prvé obsadené miesto
			maxDist = i
		} else {
			// vzdialenosť medzi dvomi obsadenými miestami
			midDist := (i - lastOccupied) / 2
			if midDist > maxDist {
				maxDist = midDist
			}
		}
		lastOccupied = i
	}
}
// vzdialenosť od posledného obsadeného miesta po koniec radu
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 }


Vysvetlenie:
- Prechádzame radom a pamätáme si index posledného obsadeného miesta.
- Pre každé obsadené miesto vypočítame vzdialenosť od predchádzajúceho a vezmeme polovicu (najvzdialenejšie miesto medzi nimi).
- Zohľadňujeme aj vzdialenosti od začiatku radu po prvé obsadené miesto a od posledného obsadeného miesta po koniec radu.
- Vraciame najväčšiu z týchto vzdialeností.