题目:给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其和>=target的长度的连续子数组[,
,...,
,
],并返回其长度。如果不存在符合条件的子数组,返回0。
结题方法:滑动窗口
结题思路:利用一个for循环,不断调节子序列的起始位置和终止位置,最终得到结果。利用for循环移动终止指针j位置,根据while(sum>=target)移动起始指针i。
PS:指针i、j指向的位置之间的区间类似移动窗口
public class Solution {
public static int minSubArrayLen(int target, int[] nums) {
int i=0;//子数组起始位置
int sum = 0;
int result = Integer.MAX_VALUE;//初始化子数组长度
for(int j = 0; j < nums.length; j++) {
sum+=nums[j];
while(sum >= target) {
//更新子数组长度
if(j-i+1 < result) {
result = j-i+1;
}
sum = sum - nums[i];//起始位置后移一个位置后的sum
i++;//更新i指针
}
}
return result == Integer.MAX_VALUE?0:result;
}