题解 | #未排序数组中累加和小于或等于给定值的最长子数组长度#

未排序数组中累加和小于或等于给定值的最长子数组长度

http://www.nowcoder.com/practice/3473e545d6924077a4f7cbc850408ade

n, k = map(int, input().split())
arr = list(map(int, input().split()))
min_sums, min_ends = [0] * n, [0] * n
min_sums[-1] = arr[-1]
min_ends[-1] = n - 1
for i in range(n - 2, -1, -1):
    if min_sums[i + 1] + arr[i] <= arr[i]:
        min_sums[i] = min_sums[i + 1] + arr[i]
        min_ends[i] = min_ends[i + 1]
    else:
        min_sums[i] = arr[i]
        min_ends[i] = i
end, su, res = 0, 0, 0
for i in range(n):
    while end < n and su + min_sums[end] <= k:
        su += min_sums[end]
        end = min_ends[end] + 1
    res = max(res, end - i)
    if end > i:
        su -= arr[i]
    else:
        end = i + 1
print(res)

全部评论

相关推荐

12-15 19:41
已编辑
广东工业大学 前端工程师
smile丶snow:尽量保证的一张a4纸吧。为什么工作经历只有公司?如果项目经历是工作里面的,应该写到工作经历里的吧。没有写项目职责,项目全是一个人写的吗?标题大小也好怪。两个项目的分割看不出来是,它和那些项目成功字体是一样大的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务