Middle
import "fmt" func maxDistants(arr []int) int { maxDist := 0 lastOne := -1 for i := 0; i < len(arr); i++ { if arr[i] == 1 { if lastOne == -1 { maxDist = i } else { dist := (i - lastOne) / 2 if dist > maxDist { maxDist = dist } } lastOne = i } } if arr[len(arr)-1] == 0 { dist := len(arr) - 1 - lastOne if dist > maxDist { maxDist = dist } } return maxDist } func main() { fmt.Println(maxDistants([]int{1, 0, 0, 0, 1})) }
sobes.tech AI
Απάντηση από AI
Η λειτουργία maxDistants σε Go υπολογίζει τη μέγιστη απόσταση μέχρι το πλησιέστερο στοιχείο με τιμή 1 σε έναν πίνακα από 0 και 1. Η ιδέα είναι να βρεθεί η θέση όπου μπορεί να τοποθετηθεί ένα 1 έτσι ώστε η απόσταση μέχρι το πλησιέστερο 1 να είναι μέγιστη.
Εξήγηση της λογικής:
- Η μεταβλητή
lastOneαποθηκεύει το δείκτη του τελευταίου 1 που βρέθηκε. - Καθώς διατρέχουμε τον πίνακα, αν συναντήσουμε ένα 1:
- Αν είναι το πρώτο 1, η μέγιστη απόσταση είναι ο δείκτης αυτού του 1 (από την αρχή).
- Διαφορετικά, υπολογίζουμε το μισό της απόστασης μεταξύ του τρέχοντος και του προηγούμενου 1 (καθώς μπορούμε να τοποθετήσουμε στη μέση).
- Μετά το πέρασμα, ελέγχουμε αν υπάρχουν μηδενικά δεξιά από το τελευταίο 1 και ενημερώνουμε τη μέγιστη απόσταση αν χρειάζεται.
Παράδειγμα χρήσης:
package main
import "fmt"
func maxDistants(arr []int) int {
maxDist := 0
lastOne := -1
for i := 0; i < len(arr); i++ {
if arr[i] == 1 {
if lastOne == -1 {
maxDist = i
} else {
dist := (i - lastOne) / 2
if dist > maxDist {
maxDist = dist
}
}
lastOne = i
}
}
if arr[len(arr)-1] == 0 {
dist := len(arr) - 1 - lastOne
if dist > maxDist {
maxDist = dist
}
}
return maxDist
}
func main() {
fmt.Println(maxDistants([]int{1, 0, 0, 0, 1})) // 2
}
Αυτός ο κώδικας λειτουργεί σωστά για την εύρεση της μέγιστης απόστασης μέχρι το πλησιέστερο 1, λαμβάνοντας υπόψη τα άκρα του πίνακα.