485. 最大连续 1 的个数

给定一个二进制数组 $nums$ , 计算其中最大连续 $1$ 的个数。

示例 1:

1
2
3
输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.

示例 2:

1
2
输入:nums = [1,0,1,1,0,1]
输出:2

提示:

  • $1 <= nums.length <= 10^{5}$
  • $nums[i]$ 不是 $0$ 就是 $1$.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int max=0, i=0;
while(i<nums.length){
int j=0;
while(i<nums.length&&nums[i++]==1){
j++;

}
if(max<j){
max=j;
}
}
return max;
}
}

这里我遇到了一个问题,就是内循环的条件i<nums.length&&nums[i++]==1当我交换位置时,就会报数组越界的错误,我知道原因是因为i++的自增导致后面i<num.length的判断失误,但是当我改成nums[i++]==1&&i-1<nums.length还是会错。。。

直接写一个debug程序追踪一下这些变量打断点逐步观察这些变量,发现nums[i++]会越界。

结论就是条件表达式是自左而右依次进行的,第一个条件表达式的相关变量会影响后续表达式的值,对于&&,第一个表达式为false则后续条件表达式不会执行,这也正是题解所写那样写不会越界的原因。