Python 你能帮我找到这段代码最坏的大O时间复杂度吗?

Python 你能帮我找到这段代码最坏的大O时间复杂度吗?,python,algorithm,big-o,Python,Algorithm,Big O,我在班上有一次测验,成绩不太好。我想知道是否有人能向我解释我在这里做错了什么——由于新冠肺炎,我们的教授在上网时忙得不可开交,所以我想我应该在这里发帖,因为我还没有听到回应 def functionC(L): for i in range(len(L)): if L[i] == i: v = L.pop(i) L.insert(i, 2*v) return 我提供了以下答复: 上面的函数是O(n),因为for循环随

我在班上有一次测验,成绩不太好。我想知道是否有人能向我解释我在这里做错了什么——由于新冠肺炎,我们的教授在上网时忙得不可开交,所以我想我应该在这里发帖,因为我还没有听到回应

def functionC(L):
    for i in range(len(L)):
        if L[i] == i:
            v = L.pop(i)
            L.insert(i, 2*v)
    return
我提供了以下答复:

上面的函数是O(n),因为for循环随着的大小而增长 L.pop和insert函数都是常数时间

时间这个词被划掉了,但是没有其他解释来解释为什么我收到了这个问题的6/10。我犯了什么错误?为什么

这是问题的图像和我的答案,以证明测验已经评分并交回


从数组中间弹出并插入到数组中是
O(N)
时间,以数组的长度为准。因此,总体时间复杂度为
O(N^2)
。在处理数组末尾时,您只会得到
O(1)
pop和insert,因为其余元素不必移位,但它在其他地方是
O(N)

如果查看此python wiki文档,您将看到pop intermediateinsert的复杂性被列为O(n) 这依次使上述代码O(n^2)