Sobes.tech
Intern

""" De plekken in de bioscoop zijn in één rij gerangschikt. Een net gearriveerde bezoeker kiest een plek, om zo ver mogelijk van de andere bezoekers in de rij te zitten. Dat wil zeggen, de afstand van die plek tot de dichtstbijzijnde bezoeker moet maximaal zijn. Er wordt gegarandeerd dat er altijd vrije plekken zijn en dat er al minstens één bezoeker zit. Schrijf een functie die, gegeven een rij van plekken (een array van nullen en enen), de afstand (het aantal tussenruimtes tussen de stoelen) vanaf de gekozen plek tot de dichtstbijzijnde bezoeker retourneert. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

sobes.tech AI

Antwoord van 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 {
			// afstand van het begin van de rij tot de eerste bezette plek
			maxDist = i
		} else {
			// afstand tussen twee bezette plekken
			midDist := (i - lastOccupied) / 2
			if midDist > maxDist {
				maxDist = midDist
			}
		}
		lastOccupied = i
	}
}
// afstand van de laatste bezette plek tot het einde van de rij
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 }


Uitleg:
- We lopen door de rij en onthouden de index van de laatste bezette plek.
- Voor elke bezette plek berekenen we de afstand tot de vorige en nemen we de helft (de meest afgelegen plek tussen hen).
- We nemen ook de afstanden van het begin van de rij tot de eerste bezette plek en van de laatste bezette plek tot het einde van de rij.
- We geven de maximale van deze afstanden terug.