刚做了Leetcode209,深刻体会了滑动窗口法的精妙,在此记录一下
题目:力扣
先记录一下我目前脑子里对于这个算法的直观体会,这个滑动窗口就像一条在整个数组上蠕动着一步步向前的毛毛虫。首先它的头部往前探一步,保证整个身体覆盖的区域内各个元素的和大于目标值target。之后逐渐将自己的尾部往前移,去探索长度最小的子数组
代码实现:
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int i = 0;
int sum = 0;
int minSubArrayLen = INT32_MAX;
int SubArrayLen = 0;
for (int j = 0;j < nums.size(); j++) { //头部往前探
sum += nums[j];
while (sum >= target) {
SubArrayLen = j - i + 1;
minSubArrayLen = minSubArrayLen < SubArrayLen ? minSubArrayLen : SubArrayLen;
sum -= nums[i];
i++; //尾部往前挪
}
}
return minSubArrayLen == INT32_MAX ? 0 : minSubArrayLen;
}
};