方法一:
蛮力法:通过两层for循环直接比较
时间复杂度:$O(n^2)$ 空间复杂度:$O(1)$
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int result = Integer.MAX_VALUE;
int sum=0;
int subLength=0;
int length=nums.length;
for(int i=0;i<length;i++){
sum=0;
for(int j=i;j<length;j++){
sum+=nums[j];
if(sum>=target){
subLength=j-i+1;
result=result<subLength?result:subLength;
break;
}
}
}
return result==Integer.MAX_VALUE ? 0:result;
}
}
方法二:滑动窗口
时间复杂度:$O(n)$ 空间复杂度:$O(1)$
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int length=nums.length;
int left=0;
int sum=0;
int result=Integer.MAX_VALUE;
for(int right=0;right<length;right++){
sum=sum+nums[right];
//下面这段代码是滑动窗口的精髓
while(sum>=target){
result=Math.min(result,right-left+1);
//此处不断的变更下标left
sum-=nums[left];
left++;
}
}
return result==Integer.MAX_VALUE?0:result;
}
}