Sobes.tech
Middle

/* I posti al cinema sono disposti in un'unica fila. Lo spettatore appena arrivato sceglie un posto per stare il più lontano possibile dagli altri spettatori in fila. Cioè, la distanza dal posto in cui si siede a quello più vicino deve essere massima. È garantito che ci siano sempre posti liberi e che almeno uno spettatore sia già seduto. Scrivi una funzione che, data una fila di posti (un array di zeri e uno), restituisca la distanza dal posto scelto. Input: [1, 0, 0, 0, 0, 1] Output: 2 Input: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Output: 2 Input: [1, 0, 1, 0] Output: 1 */

sobes.tech AI

Risposta dell'AI

La funzione deve trovare il posto (indice con zero) dove la distanza al posto occupato più vicino (uno) è massima.

Idea della soluzione:

  • Scorrere l'array, per ogni posto libero calcolare la distanza al più vicino posto occupato.
  • Restituire questa distanza massima.

Il metodo ottimale è un solo passaggio con il conteggio delle distanze ai 1 più vicini a sinistra e a destra.

Esempio in Go:

func maxDistance(sedie []int) int {
    n := len(sedie)
    distSinistra := make([]int, n)
    distDestra := make([]int, n)

    // Riempire le distanze al più vicino posto occupato a sinistra
    dist := n
    for i := 0; i < n; i++ {
        if sedie[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        distSinistra[i] = dist
    }

    // Riempire le distanze al più vicino posto occupato a destra
    dist = n
    for i := n - 1; i >= 0; i-- {
        if sedie[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        distDestra[i] = dist
    }

    maxDist := 0
    for i := 0; i < n; i++ {
        if sedie[i] == 0 {
            // Distanza minima al più vicino spettatore
            d := distSinistra[i]
            if distDestra[i] < d {
                d = distDestra[i]
            }
            if d > maxDist {
                maxDist = d
            }
        }
    }

    return maxDist
}

In questo modo, la funzione restituirà la distanza massima al più vicino spettatore per il posto scelto.