Che ne dici di usare le bitmap per registrare, per ogni possibile nbr , indipendentemente dal fatto che quel valore venga utilizzato o meno?
Per registrare che viene preso un valore, utilizzare SETBIT :
SETBIT key [nbr] 1
Per trovare un nbr gratuito usa BITPOS :
BITPOS key 0
Per evitare condizioni di gara, ti consigliamo di assicurarti che il tuo get-and-set sia atomico. [L'OP affronta questo in una domanda di follow-up.]
Ciò richiederà pochissima memoria (8 K byte per 65536 valori possibili). BITPOS è O(n), ma è improbabile che sia un problema reale.