Sobes.tech
Middle

/* Οι θέσεις στον κινηματογράφο είναι τοποθετημένες σε μια σειρά. Ο θεατής που μόλις ήρθε επιλέγει μια θέση ώστε να κάθεται όσο το δυνατόν πιο μακριά από τους άλλους θεατές στη σειρά. Δηλαδή, η απόσταση από την θέση που θα καθίσει μέχρι τον πλησιέστερο θεατή πρέπει να είναι μέγιστη. Εγγυάται ότι υπάρχουν πάντα ελεύθερες θέσεις και ότι ήδη κάθεται τουλάχιστον ένας θεατής. Γράψτε μια συνάρτηση που, με βάση μια σειρά θέσεων (ένα πίνακα με μηδενικά και μονάδες), θα επιστρέφει την απόσταση από την επιλεγμένη θέση. Είσοδος: [1, 0, 0, 0, 0, 1] Έξοδος: 2 Είσοδος: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Έξοδος: 2 Είσοδος: [1, 0, 1, 0] Έξοδος: 1 */

sobes.tech AI

Απάντηση από AI

Η λειτουργία πρέπει να βρει το σημείο (δείκτης με μηδέν) όπου η απόσταση από το πλησιέστερο κατειλημμένο σημείο (ένα) είναι μέγιστη.

Ιδέα λύσης:

  • Περπατήστε στον πίνακα, για κάθε ελεύθερο σημείο υπολογίστε την απόσταση μέχρι το πλησιέστερο κατειλημμένο.
  • Επιστρέψτε αυτή τη μέγιστη απόσταση.

Ο βέλτιστος τρόπος είναι μια διαδρομή με την καταμέτρηση των αποστάσεων μέχρι τα πλησιέστερα ένα στα αριστερά και στα δεξιά.

Παράδειγμα σε Go:

func maxDistance(θέσεις []int) int {
    n := len(θέσεις)
    αριστεράDist := make([]int, n)
    δεξιάDist := make([]int, n)

    // Γεμίζουμε τις αποστάσεις μέχρι το πλησιέστερο κατειλημμένο σημείο στα αριστερά
    dist := n
    for i := 0; i < n; i++ {
        if θέσεις[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        αριστεράDist[i] = dist
    }

    // Γεμίζουμε τις αποστάσεις μέχρι το πλησιέστερο κατειλημμένο σημείο στα δεξιά
    dist = n
    for i := n - 1; i >= 0; i-- {
        if θέσεις[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        δεξιάDist[i] = dist
    }

    maxDist := 0
    for i := 0; i < n; i++ {
        if θέσεις[i] == 0 {
            // Ελάχιστη απόσταση μέχρι τον πλησιέστερο θεατή
            d := αριστεράDist[i]
            if δεξιάDist[i] < d {
                d = δεξιάDist[i]
            }
            if d > maxDist {
                maxDist = d
            }
        }
    }

    return maxDist
}

Έτσι, η λειτουργία θα επιστρέψει τη μέγιστη απόσταση μέχρι τον πλησιέστερο θεατή για το επιλεγμένο σημείο.