209、长度最小的子数组
重点:滑动窗口小了移动j,大了while循环i
-
- 暴力破解法:两层for循环,ij之间符合要求的值,找到最小数组
-
- 滑动窗口:i起始,j终止;循环查找,找到后移动i++;所有值都定义到外面
方法一:暴力法
略
方法二:双指针法
public int minSubArrayLen(int target, int[] nums) {
int res = Integer.MAX_VALUE; //滑动窗口最小值
int i = 0; //起始位置
int sum = 0; //滑动窗口的和
int length = 0; //滑动窗口的长度
for (int j = 0; j < nums.length; j++) { // 终止位置
sum += nums[j];
while (sum >= target) { //如果符合条件了,算出长度,比较结果,最后i++,直到不符合条件,移动j
length = j - i + 1;
res = Math.min(res, length);
sum -= nums[i]; //先减了,再改变i指针
i++;
}
}
return res == Integer.MAX_VALUE ? 0 : res;
}