识别无序流中的新数字

Identify new number in unordered stream

我收到了一个无序的数字流。有没有我可以持有的数据结构,以便知道流中是否已经存在一个数字,而无需持有我从流中获得的数字集合(它是无限流)?

不,不可能避免持有所有以前看到的数字。

为此,散列 table 可能是最合适的。

可能通过压缩或利用一些 属性 数据可以实现(边际)节省,但您没有告诉我们太多相关信息。

创建一个位流,当你看到一个数字时转到那个位并翻转它。通过这种方式,您可以使用 less space.

来记住数字

所以如果要记住的数字是 32 位长。存储位流所需的总 space 为 2^32 位或 536.870912 兆字节和访问位流的恒定时间。

如果数字很大,您可以将它们再次散列为 32 位。