209.长度最小的子数组
我的解法:
滑动窗口:
- 使用指针left和right维护一个滑动窗口[left,right],sum记当前滑动窗口的元素之和;
- 一旦窗口和大于等于了target,就持续向右收缩滑动窗口,期间更新窗口长度,并记录出现的最小长度;
- 一旦窗口的元素和小于target,就向右扩张窗口,重复上述过程。
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int left = 0, sum = 0, len = 0;
int res = INT_MAX;
for(int right = 0; right < nums.size(); ++right){
sum += nums[right];
while(sum >= target){
len = right - left + 1;
res = min(res, len);
sum -= nums[left++];
}
}
return res == INT_MAX ? 0 : res;
}
};