二分+前缀和
二分问题,答案区间是$[0, max]$, 使用二分查找,把构造问题转换成判定问题
1、该问题等价于:给定正整数列A
,求一个平均数最大的、长度不小于L
的 (连续的) 子段的平均数最大值
2、通过二分给定一个平均数,如果把数列中每个数都减去平均数得到数组B[]
,就转换为判定 “是否存在一个长度不小于L
的子段,子段和非负”
3、上述问题中,需要对 B[] 数组进行前缀和sum[]
,[i,j]
表示长度为 L 的区间,minv
表示sum[i]
的最小值(该最小值的位置和 j
位置的距离一定大于等于L
),通过j
枚举整个数组B[]
,若sum[j] - minv >= 0
则表示存在该平均数使得该平均数满足题目条件,返回ture
,否则返回false