【发布时间】:2016-11-28 02:59:57
【问题描述】:
以下是Cracking the coding interview的一个问题:
你有一个包含从 1 到 N 的所有数字的数组,其中 N 最多 32,000。数组可能有重复的条目,你不知道是什么 N是。只有 4KB 可用内存,您将如何打印所有 数组中有重复元素?
方法签名是
public static void checkDuplicates(int[] array)
然后解决方案解释了如何使用位向量通过将每个整数表示为位来解决此问题。我的困惑是当我们运行这个方法时,它不会将整个数组加载到内存中循环遍历它吗?现在如果array 的大小例如,10 亿(许多重复元素),这个程序不会失败,因为它将整个数组加载到内存中,而我们拥有的内存是32 * 2^10 位?
【问题讨论】:
-
我认为问题需要 4KB additional 到阵列已经使用的内容。虽然我会说没有时间限制,但即使在恒定空间中你也应该能够做到这一点,因为你可以重复循环数组并使用 O(32k*n) 时间从 1 到 32k 计数每个数字。跨度>
-
但问题是“只有 4KB 可用内存”!!我同意它可以在恒定空间中解决,但是对于给定的问题陈述,该解决方案仅在数组大小为 2^10 时才有效
-
@tobias_k 我同意 tobias。
-
只有 4KB 可用内存,如何打印数组中的所有重复元素?感觉它是指您允许消耗的内存量来打印副本,它几乎是 4KB。
标签: java arrays memory scalability