Input - 数组/列表 a,常量 k
输出 - 总和为 <=k 的最长子列表/子数组的长度
例如给定
我是鲍勃
即数组 [1,2,3]
和 k=3
可能的子列表是[1],[2],[3],[1,2]
这里最长的子列表是[1,2]
长度 = 2
问题 - 黑客排名上的 Python 中的超时错误
时间复杂度 - 1 for 循环 - O(n)
空间复杂度 O(n)
def maxLength(a, k):
lenmax=0
dummy=[]
for i in a:
dummy.append(i)
if sum(dummy)<=k:
lenmax=max(lenmax,len(dummy))
else:
del dummy[0]
return lenmax
通过替换耗时的操作来解决
当它超过HackerRank为每个环境设置的时间限制时,就会发生超时"HackerRank TimeOut"
溶液
将 sum() 函数替换为变量
在最坏的情况下,如果整个列表一直求和,sum(list) 将需要 O(n^2) 时间。
相反,维护一个变量意味着整个函数的 O(n) 作为更新变量的 O(1)。
def maxLength(a, k):
lenmax=0
dummy=[]
sumdummy=0
for i in a:
dummy.append(i)
sumdummy+=i
if sumdummy<=k:
lenmax=max(lenmax,len(dummy))
else:
sumdummy-=dummy[0]
del dummy[0]
return lenmax