#include "s0209_minimum_size_subarray_sum.hpp" int Solution::minSubArrayLen(int target, vector& nums) { int len = nums.size(); int result{INT_MAX}; for (int begin{0}, end{0}, sum{0}; end < len; ++end) { sum += nums[end]; // 当滑动窗口里的值的总和大于等于 target 时,移动 begin 直到 sum 比 target // 小 if (sum >= target) { while (begin < end && sum >= target) { sum -= nums[begin]; ++begin; } // 循环结束后有以下几种情况 // 1. begin == end && sum >= target 此时 result == 1 // 2. begin == end && sum < target 此时 result == 2 // 3. begin < end && sum < target 此时 result == end - begin + 2 int tmp; if (begin == end) { tmp = sum >= target ? 1 : 2; } else { tmp = end - begin + 2; } // 更新 result result = tmp < result ? tmp : result; } } // 如果 result == INT_MAX 说明 result // 从来没更新过,也就意味着即使所有数组元素加在一起也比 target 小,此时返回 0 return result == INT_MAX ? 0 : result; }