参考链接:209.长度最小的子数组
注意:本题的子数组是连续的,一串一串的
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int i,j,minDis=99999999;
int sum=0;
//j控制子数组末尾,i控制子数组开头位置
for(j=0,i=0;j<nums.size();){
sum+=nums[j];
while(sum>=target){
int len=j-i+1;//得到当前ij下标之间的距离
minDis=min(minDis,len);//当前长度和已知最小长度之间获取较小值
sum-=nums[i];//因为while条件是sum>=target,所以直接从ij连续数组中减去头部元素,试图获取最短子数组
i++;//头部位置i往后挪
}
++j;
}
if(minDis==99999999){
return 0;
}
return minDis;
}
};