209.长度最小的子数组
1、双重for循环
2、双指针法
子数组就是双指针中间包含的那个子数组
class Solution {
public int minSubArrayLen(int target, int[] nums) {
// right是右指针,left是左指针
int right = 0, left = 0;
// sum是连续子数组的和,result是子数组的长度
int sum = nums[left], result = Integer.MAX_VALUE;
// 遍历right
while(right < nums.length){
// 如果满足条件
if(sum >= target){
// 判断该子数组是不是比之前的子数组长度小
int temp = right - left + 1;
// 如果比较小,那么就保存
if(result > temp){
result = temp;
}
// 将最左边的这个值删除,继续查找符合条件的子数组,看是否存在更优的子数组
sum -= nums[left];
// left的位置加一
left++;
continue;
}
// 如果不满足条件,那么右指针向右偏转,直到找到符合条件的
right++;
// 这个是因为最后一个值,可能会造成数组溢出,所以需要判断一下
if (right == nums.length) {
break;
}
sum += nums[right];
}
// 如果result一直是初始值,则表示没有满足条件的子数组
return result == Integer.MAX_VALUE ? 0 : result;
}
}