题目描述:
给定一个二进制数组, 计算其中最大连续1的个数。
示例 1:
输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-consecutive-ones
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
常规思路:需要末尾末尾补个0来解决全1的情况
/**
* @param {number[]} nums
* @return {number}
*/
var findMaxConsecutiveOnes = function(nums) {
let res = 0;
let sum = 0;
nums.push(0); // 应付全1的情况
for(let item of nums) {
if(item) {
sum += 1;
} else {
res = sum > res ? sum : res;
sum = 0;
}
}
return res;
};
双指针---快慢指针: 快指针用于判断数组中1的个数,遇到0就停止,变量比较1的个数,慢指针用于确定0元素的下一个位置,开始新一轮的判断
var findMaxConsecutiveOnes = function(nums) {
let p1 = 0, p2 = 0, res = 0;
let len = nums.length;
while(p1 < len) {
p2 = p1;
let count = 0;
while(p2 < len && nums[p2++] === 1) {
count++;
}
res = res > count ? res : count;
p1 = p2;
}
return res;
};