长度为n的数组,找出所有长度至少为k的子数组中,平均值最大的,输出这个最大的平均值。
解法:用二分法查找平均值x,对于每个x去检查是否有子数组的平均值大于x。对于一个给定的x,首先将数组的所有元素减去x,然后看是否有子数组的和大于0即可。用数组S记录a[0]...a[i]的累加和,生成S的时候顺便记录前面的最小的S[j],看看S[i]-S[j]是否大于0即可。代码见官方示例。
长度为n的数组,找出所有长度至少为k的子数组中,平均值最大的,输出这个最大的平均值。
解法:用二分法查找平均值x,对于每个x去检查是否有子数组的平均值大于x。对于一个给定的x,首先将数组的所有元素减去x,然后看是否有子数组的和大于0即可。用数组S记录a[0]...a[i]的累加和,生成S的时候顺便记录前面的最小的S[j],看看S[i]-S[j]是否大于0即可。代码见官方示例。