【LeetCode】209. 長度最小的子陣列
阿新 • • 發佈:2018-11-10
題目連結:https://leetcode-cn.com/problems/minimum-size-subarray-sum/description/
題目描述
給定一個含有 n 個正整數的陣列和一個正整數 s ,找出該陣列中滿足其和 ≥ s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。
示例
輸入: s = 7, nums = [2,3,1,2,4,3]
輸出: 2
解釋: 子陣列 [4,3] 是該條件下的長度最小的連續子陣列。
解決方法
兩種方法:一暴力列舉,二用雙指標
class Solution {
public:
int minSubArrayLen (int s, vector<int>& nums) {
//方法1:暴力列舉,時間複雜度O(n^2)。略
//方法2:雙指標,動態滑窗解決
if (nums.size()==0) return 0;//特殊情況
int left=0,right=0;//視窗起止位置
int result=INT_MAX;
int curSum=0;//當前視窗的和
while(left<nums.size()){
if (curSum< s){//(1)當前視窗的和沒有達到s,則視窗向右滑一格
curSum+=nums[right];
right++;
}
if (curSum>=s){//(2)當前視窗的和達到了s,則視窗向左收縮一格
result=min(result,right-left);
curSum-=nums[left];
left++;
}
if (curSum<s && right>=nums.size()) break; //(3)退出迴圈
}
return (result==INT_MAX)?0:result;
}
};