蓝桥杯二期模拟赛 十一题最大区间和 前缀和

52 阅读1分钟

十一. 最大区间和

image.png 数据

样例输入
6 3
2 3 9 1 9 5
样例输出
19

范围

评测用例规模与约定
  对于 30% 的评测用例,1 <= k <= n <= 301 <= a[i] <= 100。
  对于 60% 的评测用例,1 <= k <= n <= 10001 <= a[i] <= 10000。
  对于所有评测用例,1 <= k <= n <= 1000001 <= a[i] <= 1000000

这道题上来我会先想到枚举起点,然后维护一个区间最大和。

枚举起点:

就用给的样例,可以枚举的起点和K有关系:

image.png 根据图我们发现可以枚举的起点有: 2 3 9 1

每段区间都可以用(i,i+k)来表示。其中i是一个变化的值,从0开始,i++,i到n结束。

我们可以用两重循环,一重来表示各区间段,一层用来表示各区间段内元素。

我们把各区间内元素想加求出各区间段的区间和,再比较各区间段区间和,求出最大区间和。

因此我们可以写如下代码:

image.png

我们发现这个结果并不对,这是因为temp没有被重置的原因,每枚举一个新的起点的时候,temp都应该被重置,所以temp应该放到循环内部。

image.png

这个解法的时间复杂度为O(nk)。如果我们用前缀和的话时间复杂度可以达到O(n),直接少了k倍。

前缀和解法

image.png

image.png