给一个长度为n的序列,你需要求出其中连续m个数的和的最大值是多少。
输入
第一行给出一个数字T,表示数组总数 (t<100)
每组数据的第一行有两个数字 n,m (0<m≤n≤1e5)
第二行有n个数字ai (0<ai<1e9)
输出
对于每组数据,输出最大的连续m个数之和
样例输入 Copy
2
5 2
2 5 4 1 6
8 3
3 5 8 2 1 8 9 7
样例输出 Copy
9
24
题解:
从头开始遍历,维护m个数的和即可,更新最大值,同样要使用long long 防止溢出。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
int t;
scanf("%d",&t);
while(t--){
int n,m;
ll num[100002];
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%lld",&num[i]);
ll ans = 0,maxn =0;
for(int i=0;i<m;i++)
ans += num[i];
maxn= max(maxn,ans);
for(int i=m;i<n;i++){
ans = ans - num[i-m]+num[i];
maxn = max(maxn,ans);
}
printf("%lld\n",maxn);
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)