Sobes.tech
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, λαμβάνοντας υπόψη τα άκρα του πίνακα.