Sobes.tech
Middle

/* Los asientos en el cine están dispuestos en una fila. El espectador que acaba de llegar elige un asiento para estar lo más lejos posible de los demás en la fila. Es decir, la distancia desde el asiento donde se sienta hasta el espectador más cercano debe ser máxima. Se garantiza que siempre hay asientos libres y que ya hay al menos un espectador sentado. Escribe una función que, dada una fila de asientos (un array de ceros y unos), devuelva la distancia desde el asiento elegido. Entrada: [1, 0, 0, 0, 0, 1] Salida: 2 Entrada: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Salida: 2 Entrada: [1, 0, 1, 0] Salida: 1 */

sobes.tech AI

Respuesta de la IA

La función debe encontrar el lugar (índice con cero) donde la distancia al lugar ocupado más cercano (unos) sea máxima.

Idea de la solución:

  • Recorrer el array, para cada lugar libre calcular la distancia al lugar ocupado más cercano.
  • Devolver la distancia máxima.

La forma óptima es un solo recorrido con el conteo de las distancias a los unos más cercanos a la izquierda y a la derecha.

Ejemplo en Go:

func maxDistance(sillas []int) int {
    n := len(sillas)
    distIzq := make([]int, n)
    distDer := make([]int, n)

    // Rellenar las distancias al lugar ocupado más cercano a la izquierda
    dist := n
    for i := 0; i < n; i++ {
        if sillas[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        distIzq[i] = dist
    }

    // Rellenar las distancias al lugar ocupado más cercano a la derecha
    dist = n
    for i := n - 1; i >= 0; i-- {
        if sillas[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        distDer[i] = dist
    }

    maxDist := 0
    for i := 0; i < n; i++ {
        if sillas[i] == 0 {
            // Distancia mínima al espectador más cercano
            d := distIzq[i]
            if distDer[i] < d {
                d = distDer[i]
            }
            if d > maxDist {
                maxDist = d
            }
        }
    }

    return maxDist
}

Así, la función devolverá la distancia máxima al espectador más cercano para el lugar elegido.