1. 程式人生 > >Leetcode 209 長度最小的子陣列

Leetcode 209 長度最小的子陣列

題目要求:給定一個含有 個正整數的陣列和一個正整數 s ,找出該陣列中滿足其和 ≥ s 的長度最小的子陣列如果不存在符合條件的子陣列,返回 0。

分析:要求是連續子陣列,所以我們必須定義i,j兩個指標,i向前遍歷,j向後遍歷,相當與一個滑塊,這樣所有的子陣列都會在[i...j]中出現,如果nums[i..j]的和小於目標值s,那麼j向後移一位,再次比較,直到大於目標值s之後,i向前移動一位,縮小陣列的長度。遍歷到i到陣列的最末端,就算結束了,如果不存在符合條件的就返回0.

程式碼:class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int l=0,r=-1;//nums[l...r]為滑動視窗
        int sum=0;
        int res=nums.size()+1;//初始滿足長度不存在
        while(l<nums.size())
        {
            if(sum<s&&r+1<nums.size()//r+1<nums.size()是防止陣列越界
                sum+=nums[++r];
            else
                sum-=nums[l++];
            if(sum>=s)
                res=min(res,r-l+1);
        }
        if(res==nums.size()+1)
            return 0;
        return res;
    }
};