Dada uma fila de inteiros, escreva um programa que exclua todos os números negativos sem alterar a posição dos outros elementos da fila.

Passo 1

O enunciado pede para receber uma fila (queue) de inteiros e eliminar todos os valores negativos, mantendo a ordem relativa dos demais elementos. O conteúdo aqui é estrutura de dados “fila” e operações básicas de enfileirar (enqueue) e desenfileirar (dequeue).

Passo 2

Uma estratégia simples é usar uma fila auxiliar: percorremos toda a fila original retirando (dequeue) cada elemento e, se ele for não-negativo, inserimos (enqueue) na fila auxiliar. Assim, ao final, a auxiliar conterá apenas os valores desejados na ordem original.

Passo 3

Depois de construir a fila auxiliar, podemos substituir a fila original por ela ou retornar a auxiliar caso a implementação não permita modificar a original in-place.

Passo 4

Agora vamos traduzir essa ideia em código Python usando collections.deque, que oferece operações popleft() e append() em O(1).

Resposta

from collections import deque
def remove_negatives(q: deque) -> deque:
“”"
Remove todos os números negativos da fila q, mantendo a ordem dos demais.
Retorna uma nova deque contendo apenas os elementos não-negativos.
“”"
result = deque()
while q:
x = q.popleft()
if x >= 0:
result.append(x)
return result

Exemplo de uso:

fila = deque([3, -1, 0, 5, -7, 2])

nova_fila = remove_negatives(fila)

print(nova_fila) # deque([3, 0, 5, 2])

Exercícios relacionados