Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If there isn't one, return 0 instead.
For example, given the array
[2,3,1,2,4,3]
and
s = 7
,
the subarray
[4,3]
has the minimal length under the problem constraint.
【题目】
给定一个数组包含n个正整数,再给定一个整数s,找出最短长度的连续子数组,使该子数组的和sum满足sum≥s,如果不存在满足条件的情况则返回0。
例如:[2, 3, 1, 2, 4, 3] 7
输出:2
该输出对应的子数组为[4, 3]。
【思路】
两个指针,start和end。end向后走直到sum大于s。然后start向后,直到sum小于s。同时更新min值。
【Code】
public class MinimumSizeSubarraySum {
public int minSubArrayLen(int s, int[] nums) {
//两个数组索引
int start = 0;
int end = 0;
int sum = 0;//计算子数组和
int min = Integer.MAX_VALUE;//保存最小子数组长度
while(start < nums.length && end < nums.length) {
while(sum < s && end < nums.length) {
sum += nums[end++];//相加直到和大于等于s
}
while(sum >= s && start <= end) {
min = Math.min(min, end-start);//记录最短长度
sum -= nums[start++];//sum减去子数组头,start前移
}
}
return min == Integer.MAX_VALUE ? 0 : min;
}
}