这里很有意思的点是binarySearch的负返回值是:
当找不到key的时候,比key小的那个数的下标+1的相反数,
他这里利用了这个特性。
import java.util.Arrays;
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int n = nums.length;
int ans = Integer.MAX_VALUE;
int[] sums = new int[n + 1];
for (int i = 1; i <= n; i++) {
sums[i] = sums[i - 1] + nums[i - 1];
}
for (int i = 1; i <= n; i++) {
int bound = Arrays.binarySearch(sums, target + sums[i - 1]);
if (bound < 0) {
bound = -bound - 1;
}
if (bound <= n) {
ans = Math.min(ans, bound - (i - 1));
}
}
return ans == Integer.MAX_VALUE ? 0 : ans;
}
}
滑动窗口,yyds
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int n = nums.length;
int ans = Integer.MAX_VALUE;
int sum = 0;
int st = 0;
for (int i = 0; i < n; i++) {
sum += nums[i];
if (sum >= target) {
do {
sum -= nums[st++];
} while (sum >= target);
ans = Math.min(ans, i - st + 2);
}
}
return ans == Integer.MAX_VALUE ? 0 : ans;
}
}