先把每一天折成净流量 xi=inTraffici−outTraffici,题目变成:在序列 x 上求最大连续子段和;若该值不是正数,答案为 0(允许空段)。
从左到右维护「以当前下标结尾的最佳段和」cur:
cur←max(0, cur+xi)弹性公网按天记录出入流量。二维数组 days 中每一项为 [inTraffic, outTraffic]:
inTraffic:当日入方向流量outTraffic:当日出方向流量当日净流量为 inTraffic−outTraffic(可正可负)。
运营要开一个突发窗口:选择一段连续日期 [L,R](下标从 0 开始),窗口收益为这段净流量之和。
选择规则:
days 为空,返回 0请返回可获得的最大窗口收益。
请实现:
maxBurstGain(days: int[][]) -> long
(收益可能超过 32 位有符号整数,请使用 64 位整数。)
一行:二维数组 days,形如 [[5, 0], [1, 3], [6, 1]]
约束:
一个整数:最大窗口收益;不能得到正收益时为 0。
输入:
[[5, 0], [1, 3], [6, 1], [0, 9], [4, 0]]
输出:
8
说明:净流量为 5,−2,5,−9,4。取下标 [0,2],和为 5−2+5=8。若把所有净流量为正的天加起来得到 5+5+4=14,但中间被负日隔开,不连续。取全程和仅为 3。单日最大为 5,也小于 8。
输入:
[[1, 5], [2, 8], [0, 3]]
输出:
0
说明:净流量全为负。不开窗口优于任选一段,返回 0。若误取「负得最少的一天」会得到 −3。
输入:
[]
输出:
0
说明:没有流量记录。
本题属于以下题库,请选择所需题库进行购买
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.