为什么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 值。


继续加油!:)

0
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程