2025年- H135-Lc209. 长度最小的子数组(字符串)--Java版
1.题目
2.思路
利用滑动窗口的思想,定义左右指针,
右指针从左到右遍历数组中的元素,并将元素逐个相加到sum中。
如果这个sum的值,大于了target的值,我们需要把最左边的元素移除。
什么事移除,移除就是滑动窗口的总sum值要扣除这个不要的最左边的元素,然后左指针前移。
3.代码实现
class Solution {public int minSubArrayLen(int target, int[] nums) {int n=nums.length;int sum=0;int res=Integer.MAX_VALUE;int left=0;if(n==0){return 0;}for(int right=0;right<n;right++){sum=sum+nums[right];// 当窗口和大于等于 target,移动左边界while(sum>=target){res=Math.min(res,right-left+1);sum=sum-nums[left];left++;}}return res==Integer.MAX_VALUE?0:res;}
}
class Solution {public int minSubArrayLen(int target, int[] nums) {//长度最小的数组,说明元素要尽可能大,然后元素的值仅尽可能大int sum=0;int res=Integer.MAX_VALUE;int left=0;int n=nums.length;for(int right=0;right<n;right++){//滑动窗口的值相加sum=sum+nums[right];while(sum>=target){//如果当前的值大于或者等于target//如果等于的话就直接记录res的值res=Math.min(res,right-left+1);//大于target的情况,进行最左边元素的剔除sum=sum-nums[left];left++;}}if(res==Integer.MAX_VALUE){return 0;}else{return res;}}
}