给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
-
输入:s = 7, nums = [2,3,1,2,4,3]
-
输出:2
-
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
-
滑动窗口法:也叫双指针法,每次子数组和达到target,更新窗口长度,直到找到最小,每个数据被拿进来又放出去,操作两次,时间复杂度O(n)
-
class Solution { public int minSubArrayLen(int target, int[] nums) { int result = Integer.MAX_VALUE;//返回的结果 int sum = 0;//子序列的和 int left =0;//前指针 for(int right=0;right<nums.length;right++) { sum+=nums[right]; while(sum>=target) { result = Math.min(result,right-left+1); sum -=nums[left++]; } } return result == Integer.MAX_VALUE ? 0 :result; } }