Minimum Size Subarray Sum
Thoughts
Code
class Solution {
private int calcLenSubArr(int len, int[] nums, int s) {
int sum = 0;
for (int i = 0; i < len; i++) {
sum += nums[i];
}
for (int i = len; i < nums.length; i++) {
if (sum >= s) {
break;
}
sum -= nums[i - len];
sum += nums[i];
}
return sum;
}
public int minSubArrayLen(int s, int[] nums) {
if (nums.length == 0) {
return 0;
}
int start = 1, end = nums.length;
while (start + 1 < end) {
int mid = start + (end - start) / 2;
int sum = calcLenSubArr(mid, nums, s);
if (sum == s) {
end = mid;
} else if (sum < s) {
start = mid;
} else {
end = mid;
}
}
int tmp = calcLenSubArr(start, nums, s);
if (tmp >= s) {
return start;
} else {
tmp = calcLenSubArr(end, nums, s);
if (tmp >= s) {
return end;
} else {
return 0;
}
}
}
}Analysis
Last updated