n 個の正整数の配列と s 個の正整数が与えられたとき、和 ≧ s を満たす最小長の配列の連続する部分配列を求め、その長さを返します。そのような部分配列が存在しない場合は 0 を返します。
入力: s= 7, nums = [2,3,1,2,4,3]
出力:2
解释:子数组 [4,3] は、その条件で最小の長さを持つ部分配列である。
リンク
アイデア:移動ウィンドウを使用、[i,j]、拡大はj++、縮小はi++。
public int minSubArrayLen(int s, int[] nums) {
int i = 0;
int j = 0;
int min = nums.length + 1;
int sum = 0;
while(j < nums.length) {
sum += nums[j];
while(sum >= s) {
min = Math.min(min, j-i+1);
sum -= nums[i];
i++;
}
j++;
}
return min == nums.length + 1 ? 0 : min;
}