题目链接209. 长度最小的子数组 - 力扣(LeetCode)
运用双指针里的滑动窗口思想
当 sum>=target 时执行 while 里的语句,先求出 temp 也就是连续数组的长度,用 min 函数求连续数组的最小值。
然后sum-nums[left],也就是减去滑动窗口的左值,同时left++,把滑动窗口的左端往右移动一位。
接着再判断sum是否>=target,若是,重复上述过程,否则sum加上下一个数,也就是把滑动窗口往右移一位
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int left = 0;
int sum = 0;
int result = INT32_MAX;
for (int right = 0; right < nums.size(); right++) {
sum += nums[right];
while (sum>=target)
{
int temp = right - left + 1;
result = min(result, temp);
sum -= nums[left++];//滑动窗口的精髓
}
}
return result == INT32_MAX ? 0 : result;
}
};
以target=7 ,vector<int>v{ 2,3,1,2,4,3 }为例;
while内的 left 到 right 间的值依次为:
2 3 1 2
3 1 2 4
1 2 4
2 4 3
4 3
初学者,见解不足,如有错误请指出