class Solution {
public int minSubArrayLen(int target, int[] nums) {
int size = nums.length;
int sum = 0;
int min = size+1;
int left=0;
for(int i=0;i<size;i++){
sum+=nums[i];
while(sum>=target){
if(min>i-left+1){
min=i-left+1;
}
sum-=nums[left++];
}
}
return min>size?0:min;
}
}
时间复杂度O(n)空间复杂度O(1)
首先求出数组前多少个值之和大于target,然后利用while循环来求出该长度,求出该长度后,开始用left指针朝前运动,找到删除的left所指元素少于target后,该长度即为当前最短长度,用min记录,然后开始下次循环,以当前left作为起始位置,然后继续累加i所指元素,依次往复,对最短字符长度进行比较最终获得满足条件的最短长度。