2022-7-19 剑指offer-滑动窗口或者前缀和加二分查找

剑指 Offer II 008. 和大于等于 target 的最短子数组

难度中等

给定一个含有 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 }

思路:滑动窗口找最小值,或者前缀和数组加二分查找。

posted on 2022-07-19 12:26  阿ming  阅读(16)  评论(0编辑  收藏  举报

导航