如何排序400密耳。整数,每个重复最多2次?

时间:2017-08-12 13:08:51

标签: algorithm sorting bit-manipulation

给定4亿个32位整数,其中每个单独的整数最多重复两次,你如何对它们进行排序?

这是在面试中的问题。我建议使用一个带有2 ^ 32个条目的计数表 - 每个可能的值都有一个条目,每个条目需要2位。只需要遍历整数并根据需要在相应的条目中设置位。

采访者进一步询问,如果设置/清除位操作真的很贵,比如需要1ms。我没有很好的答案。我考虑使用11代替10代表2 - 所以当将事件从1增加到2时,只需要设置另一个位而不必设置一位/清除一位。这似乎不是面试官正在寻找的答案。

您有更高效的解决方案吗?

2 个答案:

答案 0 :(得分:0)

创建两个具有400 mn位的位组

设置第一个的每个位,如果你发现该位已设置并且该数字再次为avbl,则将其设置为第二个

最后读取第一个,如果设置了,检查第二个并按顺序打印

例如

Bitset1:10001100 Bitset2:00001000

最终价值:1,5,5,6

答案 1 :(得分:0)

RadixSort应该给你O(wN),其中w = 9(一个数字的最大长度),击败通常的O(NlogN),其中log(400.000)= 19

https://en.wikipedia.org/wiki/Radix_sort