Middle
/* Die Plätze im Kino sind in einer Reihe angeordnet. Der Zuschauer, der gerade angekommen ist, wählt einen Platz, um so weit wie möglich von den anderen Zuschauern in der Reihe entfernt zu sitzen. Das heißt, die Entfernung vom gewählten Platz bis zum nächsten Zuschauer sollte maximal sein. Es ist garantiert, dass immer freie Plätze vorhanden sind und mindestens ein Zuschauer bereits sitzt. Schreibe eine Funktion, die anhand einer Reihe von Plätzen (ein Array aus Nullen und Einsen) die Entfernung vom gewählten Platz zurückgibt. Eingabe: [1, 0, 0, 0, 0, 1] Ausgabe: 2 Eingabe: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Ausgabe: 2 Eingabe: [1, 0, 1, 0] Ausgabe: 1 */
sobes.tech KI
Antwort von AI
Die Funktion soll den Platz (Index mit null) finden, bei dem die Entfernung zum nächstgelegenen besetzten Platz (Einsen) maximal ist.
Lösungsansatz:
- Durchlaufen Sie das Array, berechnen Sie für jeden freien Platz die Entfernung zum nächstgelegenen besetzten Platz.
- Geben Sie diese maximale Entfernung zurück.
Die optimale Methode ist ein einziger Durchlauf mit der Zählung der Entfernungen zu den nächsten Einsen links und rechts.
Beispiel in Go:
func maxDistance(sitze []int) int {
n := len(sitze)
linksDist := make([]int, n)
rechtsDist := make([]int, n)
// Füllen der Entfernungen zum nächstgelegenen besetzten Platz links
dist := n
for i := 0; i < n; i++ {
if sitze[i] == 1 {
dist = 0
} else {
dist++
}
linksDist[i] = dist
}
// Füllen der Entfernungen zum nächstgelegenen besetzten Platz rechts
dist = n
for i := n - 1; i >= 0; i-- {
if sitze[i] == 1 {
dist = 0
} else {
dist++
}
rechtsDist[i] = dist
}
maxDist := 0
for i := 0; i < n; i++ {
if sitze[i] == 0 {
// Minimale Entfernung zum nächsten Zuschauer
d := linksDist[i]
if rechtsDist[i] < d {
d = rechtsDist[i]
}
if d > maxDist {
maxDist = d
}
}
}
return maxDist
}
Damit gibt die Funktion die maximale Entfernung zum nächsten Zuschauer für den gewählten Platz zurück.