给定一个含有 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;
}
该程序使用滑动窗口方法解决找到数组中和大于等于s的最小子数组长度问题。初始化全局最小长度为999,通过迭代数组,累加窗口内的元素和,当和大于给定值s时,更新最小长度并移动窗口起点。最终输出最小长度。
689

被折叠的 条评论
为什么被折叠?



