Leetcode 209 長度最小的子陣列
阿新 • • 發佈:2019-01-09
題目要求:給定一個含有 n 個正整數的陣列和一個正整數 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;
}
};