参考:https://blog.csdn.net/sjyttkl/article/details/76359338
def find(num,k):
n =len(num)
min_value = [0 for i in range(n)]
min_index = [0 for i in range(n)]
min_value[-1],min_index[-1] = num[-1],n-1
for i in range(n-2,-1,-1):
if min_value[i+1] <= 0:
min_value[i] = num[i] + min_value[i+1]
min_index[i] = min_index[i+1]
else:
min_value[i] = num[i]
min_index[i] = i
j = 0
maxlen = 0
minn = 0
for i in range(n):
while j < n and minn + min_value[j] <= k:
minn += min_value[j]
j = min_index[j]+1
minn -= num[i] if j > i else 0
maxlen = max(maxlen,j-i)
j = max(j,i+1)
return maxlen
find([4,3,-2,6,7,-3,-1,-2] ,5)