为什么sum还要>=s
来源:3-7 滑动窗口 Minimum Size Subarray Sum
孙大毛
2019-09-19
while (l < nums.length) {
if (r + 1 < nums.length + 1 && sum < s) {//如果当前窗口的sum值小于s
r++;
sum += nums[r];//窗口右边界向右拓展
} else {
sum -= nums[l];
l++;
}
在这段代码中,if判断的事sum<s,那么他的else就是sum>=s,那为什么下面还是sum>=s?
if(sum>=s){
res =Math.max(res,r-l+1);
}
写回答
1回答
-
liuyubobobo
2019-09-20
这是两段逻辑:
while(l < nums.size()){ // 窗口的左边界在数组范围内,则循环继续 // 第一段逻辑首先 更新 sum 值 if(r + 1 < nums.size() && sum < s) sum += nums[++r]; else // r已经到头 或者 sum >= s sum -= nums[l++]; // 第一段逻辑结束。 // 第二段逻辑在 sum >= s 的时候更新 res 值 if(sum >= s) res = min(res, r - l + 1); }
第一段逻辑有一个 else,描述如果 r + 1 >= nms.size() 或者 sum >= s 的时候要做什么。
第一段逻辑和第二段逻辑无关。
第二段逻辑根据第一段逻辑计算出的 sum 值,在必要的时候(sum >= s的时候),更新 res 值。
继续加油!:)
00
相似问题