本帖最后由 zhangjinxuan 于 2024-2-7 18:25 编辑
你只会对于 q.front 的元素进行统计,没有统计 q 所有的元素,还有你这个 k-- 直接就把 k 的值改变了。可以考虑使用支持随机访问的容器,例如 deque。
再注意一下 deque 与 queue 的区别,以及 sum 的清空就可以了:
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
int n,k;
cin>>n>>k;
deque<int>q;
int sum=0,res=-1e9;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
q.push_back(x);
if(q.size()==k)
{
sum = 0;
for(int i=0;i<k;++i)
{
sum+=q[i];
}
q.pop_front();
if(sum>res)
{
res=sum;
}
}
}
cout<<res<<endl;
}
请注意代码的时间复杂度是 O(nk) 的,如果无法通过本题可以使用一个变量 sum 维护 q 中所有的元素,减少了大部分不必要的访问与求和操作。
如果无法通过,可以使用以下代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
int n,k;
cin>>n>>k;
int a[n+1];
int sum=0,res=-1e18;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
if(i>=k)
{
if(sum>res)
{
res=sum;
}
sum-=a[i-k+1];
}
}
cout<<res<<endl;
}
|