1. 程式人生 > >LeetCode 209. 長度最小的子陣列(C++)

LeetCode 209. 長度最小的子陣列(C++)

題目:

給定一個含有 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; } };