不好意思各位,我最近在学习数据结构,现在有这三个python代码,但是运行起来后时间复杂度太大了,需要提高效率,缩小运行时间,但不能使用Compilation Optimizations,所以想请教一下各位有什么好的修改建议吗?十分感谢!
第一题其实可以转化为插入排序,如果右边大于左边数字则不用交换,小于等于则交换,然后记录数字交换的次数,时间复杂度是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]]))