Intern
""" Οι θέσεις στον κινηματογράφο είναι τοποθετημένες σε μια σειρά. Ένας θεατής που μόλις ήρθε επιλέγει μια θέση, για να καθίσει όσο το δυνατόν πιο μακριά από τους άλλους θεατές στη σειρά. Δηλαδή, η απόσταση από αυτή τη θέση, στην οποία θα καθίσει, μέχρι τον πλησιέστερο θεατή πρέπει να είναι μέγιστη. Εγγυάται ότι πάντα υπάρχουν ελεύθερες θέσεις στη σειρά και ότι ήδη κάθεται τουλάχιστον ένας θεατής. Γράψτε μια συνάρτηση που, δεδομένης μιας σειράς θέσεων (ένας πίνακας μηδενικών και ένα), επιστρέφει την απόσταση (αριθμός διαστημάτων μεταξύ των καθισμάτων) από τη επιλεγμένη θέση μέχρι τον πλησιέστερο θεατή. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 [0, 0, 0, 1] [1, 0, 0, 0] place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }
sobes.tech AI
Απάντηση από AI
Πρέπει να βρούμε το σημείο (δείκτη) με τη μέγιστη ελάχιστη απόσταση από το πλησιέστερο κατειλημμένο σημείο (1). Για αυτό, θα διασχίσουμε τον πίνακα, βρίσκοντας τα διαστήματα μεταξύ των κατειλημμένων σημείων και υπολογίζοντας τη μέγιστη απόσταση.
Αλγόριθμος:
- Περπατήστε στη σειρά, θυμηθείτε τους δείκτες των κατειλημμένων σημείων.
- Λάβετε υπόψη τρεις περιπτώσεις:
- Ελεύθερα σημεία στην αρχή της σειράς μέχρι το πρώτο κατειλημμένο.
- Ελεύθερα σημεία μεταξύ δύο κατειλημμένων.
- Ελεύθερα σημεία στο τέλος της σειράς μετά το τελευταίο κατειλημμένο.
- Για τα διαστήματα μεταξύ κατειλημμένων σημείων, η απόσταση θα είναι το ήμισυ του μήκους του διαστήματος (στρογγυλοποιημένο προς τα κάτω).
- Για τα άκρα, η απόσταση είναι ίση με το μήκος του ελεύθερου τμήματος.
- Επιστρέψτε τη μέγιστη βρεθείσα απόσταση.
Παράδειγμα υλοποίησης σε Go:
func maxPlaces(arr []int) int {
n := len(arr)
maxDist := 0
prev := -1
for i := 0; i < n; i++ {
if arr[i] == 1 {
if prev == -1 {
// Ελεύθερα σημεία στην αρχή
maxDist = i
} else {
// Ελεύθερα σημεία μεταξύ prev και i
dist := (i - prev) / 2
if dist > maxDist {
maxDist = dist
}
}
prev = i
}
}
// Ελεύθερα σημεία στο τέλος
if n-1-prev > maxDist {
maxDist = n - 1 - prev
}
return maxDist
}
Αυτός ο κώδικας επιστρέφει τη μέγιστη απόσταση από τον πλησιέστερο θεατή, όπου θα καθίσει ένας νέος θεατής.