给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
思路:最小长度->想到移动窗口,双指针
class Solution { public int minSubArrayLen(int s, int[] nums) { if(nums.length == 0) return 0; int start = 0; int end = 0; int minLen = Integer.MAX_VALUE; int sum = 0; for (; end < nums.length && start <= end; end++ ){ sum += nums[end]; if(sum < s) { continue; } while(sum >= s){ if(end-start+1 < minLen){ minLen = end-start+1; } sum -= nums[start]; start++; } } while (start < end) { sum -= nums[start]; start++; if(sum >= s && end-start+1 < minLen) { minLen = end-start+1; } } if(minLen < Integer.MAX_VALUE) return minLen; else return 0; } }