|
发表于 2024-2-7 18:21:44
|
显示全部楼层
本帖最后由 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;
- }
复制代码 |
|