提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目
二、滑动窗口
1.代码如下
代码如下(示例):
#include<bits/stdc++.h> //hua dong chuan kou
using namespace std;
int s[3005];
int main(){
int min_sum; // 初始化最小和为正无穷大
int n,m;
int sum=0;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>s[i];
}
for(int i=0;i<n;i++){
sum+=s[i];
if(i>=m-1){ //i从0开始就要m-1,从1开始m就行了
min_sum=min(min_sum,sum);// 更新最小和
sum-=s[i-m+1]; // 移动左边界,缩小窗口
}
}
if(n==0)
{
cout<<0;
return 0;
}
cout<<min_sum<<endl;
return 0;
}
详细解释:
首先,我们有一个包含8个整数的列表,代表8个不愉快事件的刺痛值:
1, 4, 7, 3, 1, 2, 4, 3
接下来,我们需要找出这些刺痛值中连续3个值的和的最小值。
步骤如下:
我们从列表中取前3个值并求和:1 + 4 + 7 = 12
目前,12是我们看到的最小值。然后,我们向右移动一位,取下一个3个值并求和:4 + 7 + 3 = 14
14不是最小值,所以我们不需要关注它。我们再次向右移动一位,取下一个3个值并求和:7 + 3 + 1 = 11
11也不是最小值,所以我们继续。继续向右移动,取下一个3个值并求和:3 + 1 + 2 = 6
现在,我们得到了更小的值,6。继续向右移动:1 + 2 + 4 = 7
再次向右移动:2 + 4 + 3 = 9
所以,最小的和是6,出现在步骤4,取3个连续的刺痛值(3, 1, 2)的和。这就是为什么答案是6。
总结
一个简单的滑动窗口列题