🏒

485. 最大连续 1 的个数

💚
难度: 简单

题目

485. 最大连续 1 的个数
给定一个二进制数组, 计算其中最大连续 1 的个数。
示例:
输入:[1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
提示:
  • 输入的数组只包含 0 和 1 。
  • 输入数组的长度是正整数,且不超过 10,000。
 

思路

方法一
  1. 将数组拼接成 string
  1. 借助正则表达式, 提取所有连续1的片段作为数组项
  1. 遍历数组, 找出长度最大项
方法二
  1. 使用 maxLength 数组来存放连续1的片段
  1. 遍历数组, 如遇1 , 则 maxLength 最后一项加 1; 如遇0, 则 maxLength 添加新一项
  1. 找出 maxLength 中最大的数值

题解

方法一
/**
 * @param {number[]} nums
 * @return {number}
 */
var findMaxConsecutiveOnes = function(nums) {
    let str = nums.join('')
    let strArr = str.match(/1+/g)
    if (!strArr) return 0
    let maxLength = 0
    strArr.forEach(s => {
        if (s.length > maxLength) maxLength = s.length
    })
    return maxLength
};
结果
执行用时:80 ms, 在所有 JavaScript 提交中击败了69.06%的用户
内存消耗:41.8 MB, 在所有 JavaScript 提交中击败了12.36%的用户
通过测试用例:42 / 42
 
方法二
let maxLength = [0]
    nums.forEach(n => {
        if (n !== 0) {
            maxLength[maxLength.length - 1] += 1
        } else {
            maxLength.push(0)
        }
    })
   return Math.max(...maxLength)
结果
执行用时:72 ms, 在所有 JavaScript 提交中击败了92.94%的用户
内存消耗:41.4 MB, 在所有 JavaScript 提交中击败了17.18%的用户
通过测试用例:42 / 42

优化点