题目:
给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/max-consecutive-ones
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例1:
输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
示例2:
输入:nums = [1,0,1,1,0,1]
输出:2
提示:
1 <= nums.length <= 105
nums[i] 不是 0 就是 1.
解法一:遍历
var findMaxConsecutiveOnes = function(nums) {
let maxCount = 0, count = 0;
const len = nums.length;
for (let i = 0; i < len; i++) {
if (nums[i] == 1) {
count++;
} else {
maxCount = Math.max(maxCount, count);
count = 0;
}
}
maxCount = Math.max(maxCount, count);
return maxCount;
};
解法二:双指针
看到题目第一个想到的就是通过双指针来解答,结果反而还不如简单的遍历,感觉代码冗余且
时间空间复杂度都没有很高,基础和我一样比较差的同学可以参考下~
var findMaxConsecutiveOnes = function(nums) {
let l = 0, r = 1;
let maxCount = 0;
if (nums.length == 1) {
return nums[0];
}
while(r <= nums.length) {
if (nums[l] == 0) {
l++;
r = l + 1;
} else {
if (nums[r] == 1) {
r++;
} else {
maxCount = Math.max(maxCount, r - l);
l = r;
r++;
}
}
}
return maxCount
};
解法三:智力法(hhh
思路:加上当前数字再乘以当前数字,相当于是遇到一加一,遇到零清零
var findMaxConsecutiveOnes = function(nums) {
let cur = 0;
let max = 0;
nums.forEach((num) =>{
cur = (cur + num) * num;
max = cur > max ? cur : max;
})
return max;
};