输入 - 数组/列表a,常量k
输出 - 最长子列表/子阵列的长度,总和< = k
E.g。给出
我是鲍勃
即。数组[1,2,3]
和k = 3
可能的子列表为[1],[2],[3],[1,2]
这里最长的子列表是[1,2]
长度 = 2
问题 - Hackerrank上的Python中的TimeOut错误
时间复杂度 - 1代表循环 - 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
答案 0 :(得分:0)
通过更换耗时的操作来解决它
当超出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