滑动窗口法-长度最小的子数组 Leetcode209

本文介绍了在LeetCode的第209题中使用滑动窗口算法解决寻找最小子数组和问题的过程。作者通过比喻将滑动窗口想象成蠕动的毛毛虫,阐述了算法的思路:头部逐步向前,保证覆盖区域和大于目标值,同时尾部随之移动,寻找最短子数组。代码实现中展示了如何维护窗口和更新最小长度。
摘要由CSDN通过智能技术生成

刚做了Leetcode209,深刻体会了滑动窗口法的精妙,在此记录一下

题目:力扣

先记录一下我目前脑子里对于这个算法的直观体会,这个滑动窗口就像一条在整个数组上蠕动着一步步向前的毛毛虫。首先它的头部往前探一步,保证整个身体覆盖的区域内各个元素的和大于目标值target。之后逐渐将自己的尾部往前移,去探索长度最小的子数组

 代码实现:

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
       int i = 0;
       int sum = 0;
       int minSubArrayLen = INT32_MAX;
       int SubArrayLen = 0;
       for (int j = 0;j < nums.size(); j++) {  //头部往前探
           sum += nums[j];
           while (sum >= target) {
               SubArrayLen = j - i + 1;
               minSubArrayLen = minSubArrayLen < SubArrayLen ? minSubArrayLen : SubArrayLen;
               sum -= nums[i];
               i++;   //尾部往前挪
           }
       }
       return minSubArrayLen == INT32_MAX ? 0 : minSubArrayLen;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值