企业门户网站建设机构,提示网站正在建设中,seo课,朝阳市做网站的公司LCR 008. 长度最小的子数组 - 力扣#xff08;LeetCode#xff09; 解法#xff1a;同向双指针-------滑动窗口算法
解释#xff1a;本是暴力枚举做法#xff0c;因为全部是正整数#xff0c;就可以利用单调性和双指针解决问题来节省时间
思路#xff1a; 如上面图LeetCode 解法同向双指针-------滑动窗口算法
解释本是暴力枚举做法因为全部是正整数就可以利用单调性和双指针解决问题来节省时间
思路 如上面图right指针走到此处sum 7长度为4因为都是正整数right再向后走仍然会 7len也会变大而题目要求符合条件最小的len因此此时right不必动了让left向后走sum会缩小因此让right又得向后走直到走完整个数组最后的len就是最小的子数组长度。
滑动窗口就是因为left right 最后都会向后走俩指针之间的部分窗口一直在滑动因此同向双指针也叫滑动窗口算法。
所以总结下来步骤为
1.left 0, right 0
2.进窗口
3.判断
4.出窗口
细节len定义时不要为0因为后续len重新赋值是要在原先和现在的值中选更小值。最后的len需要判断因为若是遍历完数组一遍len都没有变化那就需要返回0.
class Solution
{
public:int minSubArrayLen(int target, vectorint nums) {int sum 0, len INT_MAX;for(int left 0, right 0;right nums.size();right){sum nums[right];while(sum target){len min(len , right - left 1);sum - nums[left];left;}}if(len INT_MAX){return 0;}return len;}
};