Há uma lista de inteiros com valores positivos e negativos. Precisamos retornar o primeiro inteiro positivo ausente.
Por exemplo.
- Entrada - 3 -1 1 0 4 , Saída Esperada - 2
- Entrada - -1 -4 -3, Saída Esperada - 1
- Entrada - 1 3 2, Saída esperada - 4
Eu poderia chegar à solução abaixo que pode ter muito escopo para otimização. Só queria verificar se poderia haver uma solução O(n) que não usasse lógica de classificação. Se não, então alguma outra solução otimizada abaixo.
q)f: {if[all x<1;:1]; x: asc x where x>0; b:1+first where not x=1+til count x; $[0N=b;1+last x;b]}
q)f -1 -4 -3
1
q)f 1 3 2
4
q)f 3 -1 1 0 4
2
Lógica semelhante à resposta de Cathal, mas usando
except
no lugar dec where not c in x
e descartando as verificações de condição:A desvantagem é que ele é mais lento nos casos com todas as entradas <0 (pois não aborta antes do tempo), mas é mais rápido para casos com entradas com uma entrada >1.