Note:
就是满足条件之后从左边开始缩小窗口,找到一个最小的合适的
麻烦的地方就在如果全部加起来都比target小怎么办
就在更新的时候去判断一下,如果当前满足条件了,我就移动左边的指针,然后更新答案,否则就不动
最后如果res 还是INT_MAX的话,那就说明整个加起来还小于target 就返回0
好像也不很麻烦, 反正敲代码的时候没敲出来像样的…
i
是右边的指针,j
是左边的指针,就是枚举i
之后,每次都去找个最小的j
代码如下:
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int res = INT_MAX;
for(int i = 0, j = 0, sum = 0; i < nums.size(); i ++){
sum += nums[i];
while(sum - nums[j] >= target) sum -= nums[j ++];
if(sum >= target) res = min(res, i - j + 1);
}
if(res == INT_MAX) res = 0;
return res;
}
};