class Solution {
public int minSubArrayLen(int target, int[] nums) {
//滑动窗口
//返回int
int len = Integer.MAX_VALUE;
for(int left = 0; left < nums.length; left++){
int right = left, sum = 0;
while(sum < target && right <nums.length){
sum += nums[right++];
}
if(sum >= target){
len = Math.min(right-left, len);
}
}
if(len == Integer.MAX_VALUE ){
len = 0;
}
return len;
}
}
这是暴力解法,最后发现是不能过Edge case的。
优化代码如下:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int len = Integer.MAX_VALUE;
int slow = 0, sum = 0;
for(int right = 0; right < nums.length; right++){
sum += nums[right];
while(sum >= target){
len = Math.min(len, right - slow + 1);
sum -= nums[slow++];
}
}
if(len == Integer.MAX_VALUE) len = 0;
return len;
}
}
最后两行代码可以换成:
return res == Integer.MAX_VALUE ? 0 : res;
知识点:
如果 res 的值等于 Integer.MAX_VALUE,则返回 0;否则返回 res。
Integer.MAX_VALUE 是 int 类型的最大值,它的值为 2147483647。
这是Java中的三目运算符。
它的语法是:
result = condition ? value1 : value2
如果 condition 为真,则结果为 value1;如果 condition 为假,则结果为 value2。
在这个代码中,如果 res 等于 Integer.MAX_VALUE,则结果为 0;否则,结果为 res。