Sobes.tech
Intern

""" Os lugares no cinema estão dispostos numa fila. Um espectador que acaba de chegar escolhe um lugar, para sentar-se o mais longe possível dos outros espectadores na fila. Ou seja, a distância desde esse lugar, até ao espectador mais próximo, deve ser máxima. Garante-se que há sempre lugares livres e que já há pelo menos um espectador sentado. Escreva uma função que, dada uma fila de lugares (uma matriz de zeros e uns), retorne a distância (número de espaços entre os assentos) desde o lugar escolhido até ao espectador mais próximo. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

sobes.tech IA

Resposta da IA

go package main

import ( "fmt" "math" )

func maxDistance(seats []int) int { maxDist := 0 lastOccupied := -1

for i, seat := range seats {
	if seat == 1 {
		if lastOccupied == -1 {
			// distância desde o início da fila até ao primeiro lugar ocupado
			maxDist = i
		} else {
			// distância entre dois lugares ocupados
			midDist := (i - lastOccupied) / 2
			if midDist > maxDist {
				maxDist = midDist
			}
		}
		lastOccupied = i
	}
}
// distância desde o último lugar ocupado até ao final da fila
tailDist := len(seats) - 1 - lastOccupied
if tailDist > maxDist {
	maxDist = tailDist
}
return maxDist

}

func main() { fmt.Println(maxDistance([]int{1, 0, 0, 0, 1})) // 2 fmt.Println(maxDistance([]int{1, 0, 1, 0, 0, 1, 0, 0, 1})) // 2 fmt.Println(maxDistance([]int{1, 0, 1, 0})) // 1 }


Explicação:
- Percorremos a fila, lembrando o índice do último lugar ocupado.
- Para cada lugar ocupado, calculamos a distância até ao anterior e tomamos a metade (o lugar mais distante entre eles).
- Também consideramos as distâncias desde o início da fila até ao primeiro lugar ocupado e do último lugar ocupado até ao final da fila.
- Retornamos a distância máxima destas.