题目:长度最小的子数组
BL遍历
public static int minSubArrayLen(int target, int[] nums) { //BL算法
// 遍历
int length = nums.length;
int min = length+1;
for(int i = 0; i < length; i++){
int sum = 0;
for(int j = i; j < length; j++){
sum += nums[j];
if(sum >= target){
min = Math.min(min, j - i + 1);
break;
}
}
}
return min == length+1 ? 0 : min;
}
滑动窗口
public static int minSubArrayLen(int target, int[] nums) {
// 滑动窗口
int length = nums.length;
int min = length+1,left = 0,right = 0,sum = 0;
while(right < length)
{
sum += nums[right];
while(sum >= target)
{
min = Math.min(min,right-left+1);
sum -= nums[left];
left++;
}
right++;
}
return min == length+1 ? 0 : min;
}