209. 长度最小的子数组
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其和 ≥ target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组[4,3]是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4] 输出:1
示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1] 输出:0
提示:
1 <= target <= 10^9
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^5
1 class Solution { 2 public int minSubArrayLen(int target, int[] nums) { 3 int n = nums.length; 4 int left = 0, right = 0; 5 int sum = 0; 6 int res = Integer.MAX_VALUE; 7 while (right < n) { 8 sum += nums[right]; 9 //增大窗口,左开右闭的窗口[left, right) 10 right++; 11 //长度最小->寻找最短模板(while为窗口满足条件,结果在内部更新) 12 while (sum >= target) { 13 res = Math.min(res, right - left); 14 sum -= nums[left]; 15 left++; 16 } 17 } 18 return res == Integer.MAX_VALUE ? 0 : res; 19 } 20 }
我偏要勉强!