当我遇到这段代码时,我正在为 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 表示法(当然是在参加测试之前!),它说单循环操作,例如将元素一个一个添加到列表中,应该具有线性复杂度,或O(N)。
然而,正确的答案实际上是O(N^2)。我很困惑为什么会这样,有人能给我解释一下吗?因为我认为O(N^2)复杂性在嵌套 for
循环中很常见......