推文中最长的短语 - Python 超时



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

相关内容

  • 没有找到相关文章