Sobes.tech
Middle

/* Os lugares no cinema estão dispostos numa única fila. O espectador que acaba de chegar escolhe um lugar para ficar o mais longe possível dos outros espectadores na fila. Ou seja, a distância desde o lugar onde se senta até ao espectador mais próximo deve ser máxima. É garantido que há sempre lugares livres e que já há pelo menos um espectador sentado. Escreve uma função que, dada uma fila de lugares (um array de zeros e uns), devolva a distância desde o lugar escolhido. Entrada: [1, 0, 0, 0, 0, 1] Saída: 2 Entrada: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Saída: 2 Entrada: [1, 0, 1, 0] Saída: 1 */

sobes.tech IA

Resposta da IA

A função deve encontrar o lugar (índice com zero) onde a distância até ao lugar ocupado mais próximo (uns) seja máxima.

Ideia da solução:

  • Percorrer o array, para cada lugar livre calcular a distância até ao lugar ocupado mais próximo.
  • Devolver essa distância máxima.

A forma ótima é uma única passagem com a contagem das distâncias aos uns mais próximos à esquerda e à direita.

Exemplo em Go:

func maxDistance(cadeiras []int) int {
    n := len(cadeiras)
    distEsq := make([]int, n)
    distDir := make([]int, n)

    // Preencher as distâncias até ao lugar ocupado mais próximo à esquerda
    dist := n
    for i := 0; i < n; i++ {
        if cadeiras[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        distEsq[i] = dist
    }

    // Preencher as distâncias até ao lugar ocupado mais próximo à direita
    dist = n
    for i := n - 1; i >= 0; i-- {
        if cadeiras[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        distDir[i] = dist
    }

    maxDist := 0
    for i := 0; i < n; i++ {
        if cadeiras[i] == 0 {
            // Distância mínima ao espectador mais próximo
            d := distEsq[i]
            if distDir[i] < d {
                d = distDir[i]
            }
            if d > maxDist {
                maxDist = d
            }
        }
    }

    return maxDist
}

Assim, a função devolverá a distância máxima ao espectador mais próximo para o lugar escolhido.