我一直在做一些算法问题,刚刚看到了一个问题的解决方案,就像这样:
public int longestOnes(int[] nums, int k) {
int windowStart = 0, windowEnd;
for (windowEnd = 0; windowEnd < nums.length; ++windowEnd) {
if (nums[windowEnd] == 0) k--;
if (k < 0 && nums[windowStart++] == 0) k++;
}
return windowEnd - windowStart;
}
具体地说,在windowStart递增的部分(Nums[windowStart++]),我理解它将首先使用当前的windowStart值从nums数组中取值,然后递增.
然而,我不知道这段代码将在什么时候执行.仅当k<;0时?
如果是这样的话,编写如下代码是否正确:
public int longestOnes(int[] nums, int k) {
int windowStart = 0, windowEnd;
for (windowEnd = 0; windowEnd < nums.length; ++windowEnd) {
if (nums[windowEnd] == 0) k--;
if (k < 0 && nums[windowStart] == 0) k++;
if (k < 0) windowStart++;
}
return windowEnd - windowStart;
}
编辑:我理解在第三个"如果"中,k已经递增,条件将不会相同.我只是试着用一种不同的方式写下第二个"如果",以此来理解它.
不知何故,它似乎给了我不同的结果.
有人知道这两种情况的区别吗?在第二种情况下(if (k < 0 && nums[windowStart] == 0) k++;)究竟发生了什么?