长度最小子数组 – 滑动窗口(双指针)
本题使用滑动窗口法。加深对滑动窗口、双指针法的理解。
1. 暴力法 – O( n 2 n^2 n2)
第一个for循环 i 遍历所有数组元素
第二个for循环遍历 j 遍历 i 之后的所有元素,判断 i 开始的符合要求的最短区间长度
2. 滑动窗口法(双指针)-- O(n)
重点:确定 for 循环 j 代表滑动窗口的结束位置
难点:确定滑动窗口开始位置及其更新策略

int minSubArrayLen(int target, vector<int>& nums) {
int minLength = INT32_MAX; // 记录最短区间长度
int left = 0; // 记录区间左边界
int sum = 0; // 记录当前区间元素总和
bool tag = true; // 记录当前数组是否优符合要求的区间
for(int right = 0; right < nums.size(); ++right){ // 更新右边界
sum += nums[right]; // 更新区间元素和
while(sum >= target){ // 如果当前区间元素和符合要求
tag = false;
if(right - left + 1 < minLength){ // 如果当前区间长度为最小,则更新最小区间长度
minLength = right - left + 1;
}
sum -= nums[left++]; // 更新区间左边界
}
}
if(tag) return 0;
else return minLength;
}