题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
思路:双指针,在 right 的左边找到一个最靠右的 left,使得 [left,right] 子数组的和大于等于 target。
C++ 代码如下:
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int n = nums.size();
int res = INT_MAX;
for (int left = 0, right = 0, sum = 0; right < n; right++) {
sum += nums[right];
while (sum - nums[left] >= target) {
sum -= nums[left];
left++;
}
if (sum >= target) {
res = min(res, right - left + 1);
}
}
return res == INT_MAX ? 0 : res;
}
};