LeetCode 209. 长度最小的子数组(Minimum Size Subarray Sum)
题目描述
给定一个含有 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 };