给定4亿个32位整数,其中每个单独的整数最多重复两次,你如何对它们进行排序?
这是在面试中的问题。我建议使用一个带有2 ^ 32个条目的计数表 - 每个可能的值都有一个条目,每个条目需要2位。只需要遍历整数并根据需要在相应的条目中设置位。
采访者进一步询问,如果设置/清除位操作真的很贵,比如需要1ms。我没有很好的答案。我考虑使用11代替10代表2 - 所以当将事件从1增加到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