在长度为n(其中n=2k+3)的序列中,有k个数字出现了两次,而另外三个数字仅出现一次。
问题是:如何找到这三个仅出现一次的数字?
例如,在序列1 1 2 6 3 6 5 7 7中,三个独特的数字是2、3和5。
注意: 3≤n<1e6并且数字范围在1至2e9之间。 内存限制:1000KB,这意味着我们不能存储整个序列。
我尝试过的方法(超出了内存限制): 我初始化了一个树,在读入一个数时,我尝试从树中删除它,如果删除返回false(未找到),我就将其添加到树中。最后,树中有三个数字。这个方法可以工作,但超出了内存限制。
我知道如何使用位运算找到一个或两个这样的数字。因此,我想知道是否可以使用相同的方法(或类似的方法)找到三个数字?
找到一个/两个只出现一次的数字的方法: 如果一个数字仅出现一次,则可以对序列应用XOR来查找它。
如果有两个数字,我们可以先对序列应用XOR,然后通过结果中的一个位将序列分成两个部分,并再次对这两个部分进行XOR,就能找到答案。
问题是:如何找到这三个仅出现一次的数字?
例如,在序列1 1 2 6 3 6 5 7 7中,三个独特的数字是2、3和5。
注意: 3≤n<1e6并且数字范围在1至2e9之间。 内存限制:1000KB,这意味着我们不能存储整个序列。
我尝试过的方法(超出了内存限制): 我初始化了一个树,在读入一个数时,我尝试从树中删除它,如果删除返回false(未找到),我就将其添加到树中。最后,树中有三个数字。这个方法可以工作,但超出了内存限制。
我知道如何使用位运算找到一个或两个这样的数字。因此,我想知道是否可以使用相同的方法(或类似的方法)找到三个数字?
找到一个/两个只出现一次的数字的方法: 如果一个数字仅出现一次,则可以对序列应用XOR来查找它。
如果有两个数字,我们可以先对序列应用XOR,然后通过结果中的一个位将序列分成两个部分,并再次对这两个部分进行XOR,就能找到答案。