代码随想录第二天 2023.7.13
题目链接:
209. 长度最小的子数组 - 力扣(Leetcode)https://leetcode.cn/problems/minimum-size-subarray-sum/考查知识点:滑动窗口,双指针的应用
代码如下:
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int i=0;
int j;
int subL=0;
int result=INT32_MAX;
int sum=0;
for(j=0;j<nums.size();j++){
sum+=nums[j];
while(sum>=target){
subL=j-i+1;
result=min(result,subL);
sum-=nums[i];
i++;
}
}
return result==INT32_MAX? 0 : result;
}
};
注意:
1.明白i和j两个指针指向的位置,i指向滑动窗口开始位置,j指向滑动窗口终止位置,滑动窗口其实就是通过i和j的移动来实现;
2.sum>=target的循环语句用while还是用if?
应该用while,因为if()条件满足时只会执行一次,而在本题中要求满足条件时不断更新result和sum的值,所以应该使用while
3.i和j自增的位置不同,j自增是在for循环中,i自增是在while循环中用于更新滑动窗口的右边界