我必须完成实习的在线编程测试,并得到关于复杂性分析的问题.我回答了这个问题并且标记错了,我只想理解为什么,所以我可以改进.
问题:
当reverseOrder为true且为false时,给出以下算法的复杂性:
List<int> stackToList(Stack<int> stack, bool reverseOrder) {
List<int> items = new List<int>();
while (stack.Count > 0) {
int item = stack.Pop();
if (reverseOrder) {
items.Insert(0, item);
} else {
items.Add(item);
}
}
return items;
}
Run Code Online (Sandbox Code Playgroud)
编辑:这是多项选择,可能的答案是:
您可以在reverseOrder为true时选择一个,为false时选择另一个.
我的答案:
我通过以下方式得到了这个答案:
n次数,因为它会继续,直到没有剩余的元素弹出Pop() 是 O(1)在的情况下reverseOrder存在true,一个Insert到该列表的前面制成.由于List<T>是由数组支持,它被动态地调整大小和每一个元件向上移动一个空间,所述元件被插入在索引0.根据https://msdn.microsoft.com/en-us/library/sey5k5z4(v = vs.110).aspx:
该方法是O(n)操作,其中n是Count.
在的情况下reverseOrder存在false …