2022-7-19 剑指offer-滑动窗口或者前缀和加二分查找
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其和 ≥ target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
1 class Solution { 2 public int minSubArrayLen(int target, int[] nums) { 3 int ans=100001,n=nums.length; 4 int l=0,r=0,sum=0; 5 while (r<n){ 6 sum+=nums[r]; 7 r++; 8 if (sum>=target){ 9 while (l<r&&sum>=target){ 10 sum-=nums[l]; 11 l++; 12 } 13 ans=Math.min(r-l+1,ans); 14 } 15 } 16 return ans==100001?0:ans; 17 } 18 }
思路:滑动窗口找最小值,或者前缀和数组加二分查找。