给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。
示例:
输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。
//长度最小的子数组,滑动窗口方法
#include<iostream>
using namespace std;
int main()
{
int a[] = {2,3,1,2,4,3};
int s,min_length,result = 999;// min_length为局部的最小长度,result为全局的最小长度
int sum,i=0;
cin>>s;
for(int j=0;j<6;j++) //i代表窗口起始位置,j代表窗口终止位置
{
sum+=a[j];
while(sum>=s) //这个地方不能用if,不然会出错
{
min_length = (j-i+1);
result = min(min_length,result); //如果局部最小值更小,就更新长度
sum-=a[i];
i++;
}
}
cout<<result;
return 0;
}