LeetCode 209. 長度最小的子陣列(C++)
阿新 • • 發佈:2019-01-10
題目:
給定一個含有 n 個正整數的陣列和一個正整數 s ,找出該陣列中滿足其和 ≥ s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。
示例:
輸入: s = 7, nums = [2,3,1,2,4,3]
輸出: 2
解釋: 子陣列 [4,3] 是該條件下的長度最小的連續子陣列。
思路:
採用滑動視窗的方式,從陣列最左側開始向右滑動,以子陣列內所有元素和sum與s的關係作為滑動條件,當sum
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int left = 0,right = -1; //[left..right]為連續子陣列,初始時不包含任何元素
int sum = 0;
int minLen = nums.size() + 1; //滿足條件的子陣列的最小長度
while(left < nums.size()){
if(sum < s && right + 1 < nums.size())
sum += nums[++right];
else
sum -= nums[left++];
if (sum >= s)
minLen = min(right - left + 1,minLen);
}
if(minLen == nums.size() + 1)
return 0;
return minLen;
}
};