Sobes.tech
Intern

""" Die Plätze im Kino sind in einer Reihe angeordnet. Ein neu ankommender Zuschauer wählt einen Platz, um so weit wie möglich von den anderen Zuschauern in der Reihe zu sitzen. Das heißt, die Entfernung von diesem Platz zum nächsten Zuschauer sollte maximal sein. Es ist garantiert, dass immer freie Plätze vorhanden sind und mindestens ein Zuschauer bereits sitzt. Schreiben Sie eine Funktion, die anhand einer gegebenen Sitzreihe (ein Array aus Nullen und Einsen) die Entfernung (Anzahl der Zwischenräume zwischen den Sitzen) vom gewählten Platz zum nächsten Zuschauer zurückgibt. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

sobes.tech KI

Antwort von 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 {
			// расстояние от начала ряда до первого занятого места
			maxDist = i
		} else {
			// расстояние между двумя занятыми местами
			midDist := (i - lastOccupied) / 2
			if midDist > maxDist {
				maxDist = midDist
			}
		}
		lastOccupied = i
	}
}
// расстояние от последнего занятого места до конца ряда
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 }


Объяснение:
- Идём по ряду, запоминая индекс последнего занятого места.
- Для каждого занятого места считаем расстояние до предыдущего и берём половину (максимально удалённое место между ними).
- Также учитываем расстояния от начала ряда до первого занятого места и от последнего занятого места до конца ряда.
- Возвращаем максимальное из этих расстояний.