209.长度最小的子数组
思路🧐:
该题可以用滑动窗口进行解答,滑动窗口的意思是,我们判断一段区间的情况,再根据不同情况进行区间的更新。
这里要求满足总和大于等于target的子数组,那么我们可以用两个指针当做左区间和右区间,再用个sum变量统计该区间的和。当sum小于target时,右区间更新,向右移动,当sum大于等于target时,此时就是该左区间到右区间满足target的最短长度,所以需要更新左区间,然后继续判断。
代码🔎:
class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size();int len = INT_MAX;for(int left = 0, right = 0, sum = 0; right < n; right++){sum += nums[right]; //统计当前窗口之和while(sum >= target) //当满足条件{len = min(len, right - left + 1); //计算长度sum -= nums[left++]; //更新窗口}}return len == INT_MAX ? 0 : len;} };
时间复杂度:O(N) 空间复杂度:O(1)