1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class Solution { public : int minSubArrayLen( int s, vector< int >& nums) { if (nums.size() <= 0) return 0; int left = 0; //[left....right]为滑动窗口,初始时,没有一个元素 int right = -1; int sum = 0; //初始化和sum为0 int res = nums.size() + 1; //初始化一个最大长度 while (left < nums.size()){ if (right + 1 < nums.size() && sum < s) sum += nums[++right]; //加上right后面一个数值,然后跳到下面一个if语句 else //sum>=s sum -= nums[left++]; //减去前一个 if (sum >= s) res = min(res, right - left + 1); } if (res == nums.size() + 1) return 0; return res; } }; |
以上是被Leetcode AC的答案,但是对其中有一个细节有点疑惑,该问题出现在while循环中if...else语句中的else中:
1 2 3 4 5 6 7 8 9 10 | while (left < nums.size()){ if (right + 1 < nums.size() && sum < s) sum += nums[++right]; //加上right后面一个数值,然后跳到下面一个if语句 else //sum>=s sum -= nums[left++]; //减去前一个 if (sum >= s) res = min(res, right - left + 1); } |
else语句表示r达到尾部了,或者sum>=s,如果是后者,即sum>=s时,那么sum减去一个nums[left]之后再++,然后跳到后一个if语句,如果sum减去一个nums[left]之后的sum的值<s了,后面的if语句即不成立,那么在未减去nums[left]之前的这种情况不是被忽略了吗? 即刚进入else语句,且满足sum>=s这种情况不是会在减去一个nums[left]之后被忽略吗?