如果我这样做
int n = some arbitrary number
int[] array = new int[n];
是需要线性的时间(O(n))还是常数(O(1))?
我看了in the javadocs,例如。 StackOverflow中的here但没有找到答案,因为我看到的所有帖子都涉及动态分配。
答案 0 :(得分:0)
在java中,当你创建一个int
的新数组时,数组的所有成员必须得到int的初始值(即'0'),因此初始化包括n
的赋值值0
,因此取O(n)。
您还可以使用以下代码使用不同的n来验证它:
public static void main(String[] args)
{
int n = 1000000;
int numSamples = 10000;
long sumTime = 0;
for (int i = 0; i < numSamples; i++)
{
sumTime += test(n);
}
double average = sumTime / (double) numSamples;
System.out.println(average);
}
private static long test(int size)
{
long start = System.currentTimeMillis();
int[] a = new int[size];
return System.currentTimeMillis() - start;
}