这是一个面试问题,我在很多地方都找到了答案。我必须承认我无法理解解决方案,所以我在这里提出问题寻求帮助:
Given an array having 16000 unique integers, each lying within the range 1 to 20000, how
do u sort it. U can load only 1000 numbers at a time in memory.
以下是我遇到的解决方案,但我无法理解:http://www.careercup.com/question?id=23123665
具体问题:
答案 0 :(得分:1)
链接的解决方案实质上是存储数字列表的紧凑直方图。每个直方图桶只接受一个数字,并且列表中的数字是唯一的,因此存储桶只需要从0到1(一位)计数。因此,每个桶只有一个数字,需要存储在内存中的20,000个桶。
您可以将20,000个一位桶装入625个32位整数。您可以将整数数组视为一位值的二维数组,包含625行和32列。要查找特定数字的存储桶,请使用数字/ 32找到该行,使用数字%32找到该列。
一旦您完成并计算列表中数字的存在,您的直方图就可以按顺序写回。