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
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
“”"
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