关于python代码优化的问题,如何解决?

不好意思各位,我最近在学习数据结构,现在有这三个python代码,但是运行起来后时间复杂度太大了,需要提高效率,缩小运行时间,但不能使用Compilation Optimizations,所以想请教一下各位有什么好的修改建议吗?十分感谢!

img

img

img


下面是对应的三个问题

img

img

img


如果方便的话可以麻烦各位展示一下优化过后的代码嘛,谢谢!

第一题其实可以转化为插入排序,如果右边大于左边数字则不用交换,小于等于则交换,然后记录数字交换的次数,时间复杂度是O(n)到O(n^2),你可以试试看能不能pass

def fun(n,l):
    res = 0
    for i in range(1,n):
        j = i-1
        while l[i]<=l[j] and j>=0:
            l[j],l[i] = l[i],l[j]
            i,j = j,j-1
            res += 1
    return res

n = int(input())
l = list(map(int,input().split()))
print(fun(n,l))

第二题超时可能是因为递归,有很多重复计算,测试数据最大到3^7=2187,可以试试创建最大2187*2187二维列表,然后真的去“打孔”试试
第三题感觉没什么特殊的,就是列表的一般操作,可以考虑用切片来做试试,感觉切片比append/insert/remove这种列表方法要快一些。

def cal(n,l):
    li = []
    for i in range(n):
        if l[i][0]==1:
            li = li[:l[i][1]]+[l[i][2]]+li[l[i][1]:]
        elif l[i][0]==2:
            li[l[i][1]-1:l[i][1]]=""
        else:
            print(sum(li[l[i][1]-1:l[i][2]]))