思路:
老套路,我发现了,最近做的数组题,做不出来可以想一下双指针,如果这道题暴力遍历的话肯定很慢了,但是如果使用双指针维持一个滑动窗口的话,就会快很多。
主要思路就是搞一个滑动窗口,如果滑动窗口中的和大于了target,那么就让滑动窗口的头部往前走一步,如果等于target就更新数组长度,如果小于target就更新滑动窗口末尾,这样就能使用nlog(n)的时间复杂度来解决这道题。
代码:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int i = 0;
int sum = 0;
int result = Integer.MAX_VALUE;
for (int j = 0; j < nums.length; j++) {
sum += nums[j];
while (sum >= target) {
result = Math.min(result, j - i + 1);
sum -= nums[i++];
}
}
return result == Integer.MAX_VALUE ? 0 : result;
}
}