我正在准备考试,我来到这个问题:
以下代码的总运行时间是多少(N是一个int变量)
Z z = new Z(N);
for (int i = 0; i < N; i++) z.insert("Bob", i);
Z级:
public class Z
{
String[] names;
Integer[] numbers;
int N = 0;
public Z(int cap)
{
names = new String[cap];
numbers = new Integer[cap];
}
public Integer find(String S)
{
for (int i = 0; i < N; i++)
{
if (names[i].equals(S)) return numbers[i];
}
return null;
}
public void insert(String S, Integer M)
{
for (int i = 0; i < N; i++)
{
if (names[i].equals(S)) numbers[i] = M;
}
names[N] = S;
numbers[N] = M;
N++;
}
}
我认为这个问题的答案是O(n ^ 2)。第一个for循环需要O(n)次,方法insert需要O(n)次(注意:每次插入调用都是n ++),总数为O(n ^ 2)
答案 0 :(得分:0)
首先请注意,主要部分中的 N 变量与对象实例中引用的 N 不同。
创建 z 对象后,其私有 N 成员等于0,并且只会在每次调用insert
时增加。
因此,insert
方法中的循环迭代的次数等于先前对insert
方法的调用次数。
因此,insert
方法(将所有 N 调用一起完成)中的总迭代次数为:
Σ i = 0..N-1 (i)
这等于:
<强>½N(N-1)强>
½N² - ½N因而 O(n²)