我想编写一个函数,它接受整数集合并从集合中删除重复项。我无法应用任何排序算法。同样,我无法复制该集合。我需要节省内存并提供一种有效的解决方案,可以处理数百万件物品而不会显着过度使用电池。
答案 0 :(得分:1)
如果内存非常短缺,最好的解决方案就是不要包含冗余 首先是列表中的整数。 要做到这一点,你可以使用一个布尔数组[0..65536](你可以'打包'8乘8来缩小它),记录哪一个已经被使用过。
另一种解决方案是通过在正确的位置插入项目来对列表进行排序,但如果它们已经在这里,则不插入它们。对于每个项目,插入将在日志中(到目前为止唯一项目的数量),因此它应该类似于列表的n * log(n)时间。
如果您无法控制源,您仍然可以使用布尔数组,如果需要可能更大,然后初始化它(将all设置为false,然后:isUsed [itemList [i]] = true; ),然后你可以处理列表,这样你就有了内存,然后从数组中建立一个新的列表。所以输出将被订购。
如果你的整数是32位,那么数组将是500 MB大,所以可能太大了......,但取决于整数分布(有多种可能的数字??),你可能会能够降低那个尺寸......
请注意,如果内存很短,则可以使用对象池来重用对象 (您甚至可以重新使用刚刚从列表中删除的对象。)