このコード セグメントに遭遇したとき、UIL のコンピューター サイエンス演習テストを行っていました (Structure<E>
クラスには他にもメソッドがありましたが、問題とは関係がないようでした)。
public class Structure<E>
{
private E data;
private Structure<E> s;
Structure(E d)
{
data = d;
}
public void add(E d)
{
if (s == null)
s = new Structure<E>(d);
else
s.add(d);
}
}
// Client method
public Structure<Integer> demo(int[] vals)
{
Structure<Integer> s;
s = new Structure<Integer>(vals[0]);
for (int i = 0; i < vals.length; i++)
s.add(vals[i]);
return s;
}
そのため、この質問では、demo()
クライアント メソッドの最も制限的な複雑さを判断するよう求められました。私は大きな O 記法を読んで (もちろんテストを受ける前に!)、要素を 1 つずつリストに追加するような単一のループ操作は、線形の複雑さ、つまりO(N)を持つ必要があると述べました。
しかし、実際の正解はO(N^2)でした。どうしてなのか分からないのですが、どなたか教えていただけないでしょうか?ネストされたループではO(N^2)の複雑さが一般的だと思っていたので... for