1. 程式人生 > >LeetCode 209. 長度最小的子數組(Minimum Size Subarray Sum)

LeetCode 209. 長度最小的子數組(Minimum Size Subarray Sum)

leet 不存在 vector amp 記錄 移動 連續子數組 num mil

題目描述

給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中滿足其和 ≥ s 的長度最小的連續子數組。如果不存在符合條件的連續子數組,返回 0。

示例:

輸入: s = 7, nums = [2,3,1,2,4,3]
輸出: 2
解釋: 子數組 [4,3] 是該條件下的長度最小的連續子數組。

解題思路

記錄當前的連續子數組和,若大於等於s,則以當前子數組的最左端為基準向後遍歷,若去掉此數後當前連續子數組和仍大於等於s,就把左端向右移動一位,否則更新當前的最小連續子數組長度。

代碼

 1 class Solution {
2 public: 3 int minSubArrayLen(int s, vector<int>& nums) { 4 int minCnt = INT_MAX, left = 0, right = 0, sum = 0; 5 while(right < nums.size()){ 6 sum += nums[right]; 7 if(sum >= s){ 8 while(left < right && sum - nums[left] >= s)
9 sum -= nums[left++]; 10 minCnt = min(minCnt, right - left + 1); 11 } 12 right++; 13 } 14 if(minCnt == INT_MAX) return 0; 15 return minCnt; 16 } 17 };

LeetCode 209. 長度最小的子數組(Minimum Size Subarray Sum)