给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的 连续子数组[numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
示例 :
输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3]
package pro1;
//滑动窗口,当终止位置移动到符合>=target的位置时,再不断变更起始位置,直到找到最小长度
public class MyCode {
public static int minSubArrayLen(int target, int[] nums) {
int result = Integer.MAX_VALUE; //最终结果
int sum = 0;
int i = 0; //起始位置
for(int j = 0;j < nums.length;j++){
sum += nums[j];
while(sum >= target){
result = Math.min(result, j - i + 1); //因为我们要找的是符合>=target的长度最小的子数组,j-i+1就是一个子数组的长度
sum = sum - nums[i];//i向前移动后,新的sum就会等于原来的sum-nums[i]
i++;//不断变更起始位置,来获得最小子数组的长度
}
}
return result == Integer.MAX_VALUE ? 0 : result;//如果没有长度最小的子数组,就会返回0
}
public static void main(String[] args) {
int[] nums = {2,3,1,2,4,3};
int goal = 7;
int min = minSubArrayLen(goal,nums);
System.out.print(min);
}
}
是该条件下的长度最小的子数组。