Intern
""" Οι θέσεις στον κινηματογράφο είναι τοποθετημένες σε μια σειρά. Ένας θεατής που μόλις έφτασε επιλέγει μια θέση, για να καθίσει όσο το δυνατόν πιο μακριά από τους άλλους θεατές στη σειρά. Δηλαδή, η απόσταση από αυτή τη θέση, μέχρι τον πλησιέστερο θεατή, πρέπει να είναι μέγιστη. Εγγυάται ότι υπάρχουν πάντα ελεύθερες θέσεις και ότι ήδη κάθεται τουλάχιστον ένας θεατής. Γράψτε μια συνάρτηση που, δεδομένης μιας σειράς θέσεων (ένας πίνακας με μηδενικά και μονάδες), θα επιστρέφει την απόσταση (αριθμός διαστημάτων μεταξύ των καθισμάτων) από την επιλεγμένη θέση μέχρι τον πλησιέστερο θεατή. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """
sobes.tech AI
Απάντηση από 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 }
Εξήγηση:
- Περνάμε κατά μήκος της σειράς και θυμόμαστε τη θέση του τελευταίου κατειλημμένου.
- Για κάθε κατειλημμένο, υπολογίζουμε την απόσταση με το προηγούμενο και παίρνουμε το μισό (το πιο απομακρυσμένο σημείο ανάμεσά τους).
- Λαμβάνουμε επίσης υπόψη τις αποστάσεις από την αρχή της σειράς μέχρι το πρώτο κατειλημμένο και από το τελευταίο κατειλημμένο μέχρι το τέλος.
- Επιστρέφουμε τη μεγαλύτερη από αυτές τις αποστάσεις.