最初的想法:
一维数组,简单使用for each遍历。首先判断边界条件,然后使用res记录最终结果,tem记录中间变量。遍历过程中,使用如果一直是1则tem++,如果不是1则判断res取与tem比的较大值,最终返回res。代码如下:
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
if ((null == nums) || (0 == nums.length)) {
return 0;
}
int res = 0;
int tem = 0;
for (int num : nums) {
if (1 == num) {
tem++;
} else {
res = Math.max(tem, res);
tem = 0;
}
}
return res;
}
}
问题:如果遍历了不是0才进行比较、赋值,这一步考虑不周,没考虑到最后1是边界值的情况,导致问题,再根据题目的边界说明,不需要添加初始的边界判断。修改如下:
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int res = 0;
int tem = 0;
for (int num : nums) {
if (1 == num) {
tem++;
} else {
res = Math.max(tem, res);
tem = 0;
}
}
res = Math.max(tem, res);
return res;
}
}
进阶:
连续数组一般可以尝试数组的值累加、操作下标等方法
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int res = 0, sum = 0;
for (int num : nums) {
sum = (sum + num) * num;
res = Math.max(res, sum);
}
return res;
}
}
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int index = -1;
int res = 0;
for (int i = 0; i < nums.length; i++) {
if (1 == nums[i]) {
res = Math.max(res, i - index);
} else {
index = i;
}
}
return res;
}
}
参考资料: