【发布时间】:2021-01-21 00:48:51
【问题描述】:
如何将一个大小arr[i]<=10^8.
下面的代码给出了运行时错误和 java.lang.OutOfMemoryError。
我已经多次收到这个问题但从未得到答案,因为它给出了较大的 n 和 arr[i] 值的错误。
我知道它不能以下面给出的方式完成。那么问题来了,如何用 Java 实现呢?
n=100000000;//User input
int[] arr=new int[n];
int[] b=new int[n];
for(int i=0;i<n;i++)
{
b[i]=arr[i]+1;
}
【问题讨论】:
-
2 个这样大小的数组大约有 800MB 的 RAM,您必须有足够大的连续内存区域才能成功分配。您使用的是 32 位操作系统吗?但真正的问题是什么?你在做一些比赛吗?你需要读取这样一个巨大的数组是非常罕见的
-
糟糕,实际上是heap size 可能会受到限制;无论如何,两者之一应该会给你答案。
-
我在多个比赛中都得到了这个问题,只是不知道对这种大小的数组进行操作的正确方法。
-
不,您不能对这种大小的数组进行操作。您需要更改算法,通常它最多只需要一个 O(n.logn) 空间,尽管很可能是 O(1) 或 O(n),并且比 brute 快得多像这样强迫