长度最小的子数组
暴力法:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
//最终结果
int result = Integer.MAX_VALUE;
//子数组之和
int sum = 0;
//子数组长度
int sublen = 0;
//两个for循环遍历,当连续子数组的和大于等于target时,且子数组长度为最小值时则更新子数组长度
for(int i = 0; i < nums.length; i ++) {
sum = 0;
for(int j = i; j < nums.length; j ++) {
sum += nums[j];
if(sum >= target) {
sublen = j - i + 1;
result = result > sublen ? sublen : result;
break;
}
}
}
return result == Integer.MAX_VALUE ? 0 : result;
}
}
滑动窗口法:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
//最终结果
int result = Integer.MAX_VALUE;
//滑动窗口数值之和
int sum = 0;
//滑动窗口长度
int sublen = 0;
//滑动窗口起始位置
int i = 0;
for(int j = 0; j < nums.length; j++) {
sum += nums[j];
//不断比较子数组是否符合条件
while(sum >= target) {
sublen = j - i + 1;
result = result > sublen ? sublen : result;
//不断变更滑动窗口起始位置
sum -= nums[i++];
}
}
return result == Integer.MAX_VALUE ? 0 : result;
}
}