给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的子数组。如果不存在符合条件的子数组,返回 0。
示例:
输入:[2,3,1,2,4,3],
s = 7
输出: 2 解释: 子数组[4,3]
是该条件下的长度最小的子数组。
进阶:
如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。
class Solution {
//时间复杂度 0(n)
//空间复杂度 O(1)
public int minSubArrayLen(int s, int[] nums) {
int n = nums.length;
int left =0,min = 0,sum = 0;
for(int i=0;i<n;i++){
sum+=nums[i];
while(sum>=s){
if(min==0){
min = i-left+1;
}else{
min = Math.min(i-left+1,min);
}
sum -=nums[left];
left++;
}
}
return min;
}
}