# 485 最大连续1的个数

# 题目

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

示例 1:

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

注意:

输入的数组只包含 0 和1。 输入数组的长度是正整数,且不超过 10,000。

# 题解

  1. 使用 split 拆分 0,获取到所有带有数字 1 的数组,依次遍历获取字符串的 length,然后找出最大值。

TIP

执行用时:96 ms, 在所有 JavaScript 提交中击败了 40.72% 的用户

内存消耗:42.4 MB, 在所有 JavaScript 提交中击败了 22.03% 的用户

/**
 * @param {number[]} nums
 * @return {number}
 */
var findMaxConsecutiveOnes = function(nums) {
    // 拼接后拆分 0,获取所有带 1 的数组,此时所有连续的 1 已经被分配好
    let numList = nums.join('').split('0')
    // 通过 map 返回 被分配好 1 的长度,也是就个数
    // 通过 Math.max 来获取最大值,使用 ... rust 语法
    return Math.max(...numList.map(num => num.length))
};
  1. 这次通过一次遍历找到值。

TIP

执行用时:88 ms, 在所有 JavaScript 提交中击败了 63.44% 的用户

内存消耗:40.4 MB, 在所有 JavaScript 提交中击败了 67.40% 的用户

var findMaxConsecutiveOnes = function(nums) {
    // 总共的最大值
    let maxNum = 0
    // 遇到 0 之前的值
    let currentNum = 0
    for(let i=0;i<nums.length;i++) {
        // 如果遇到 1,则当前的值加一
        if(nums[i] === 1) {
            currentNum++
            
        } else {
            // 遇到 0,则判断当前累加起来的值,是否比总共的最大值大,如果大,则替换
            if(currentNum > maxNum){
                 maxNum = currentNum
            } 
            // 不管是否替换,都需要把当前 1 的值清空,因为需要重新计数
            currentNum = 0
        }
    }

    // 一个坑点,就是最后一个值为 1 的情况下,需要手动判断下是否需要替换
    if(nums[nums.length-1]) {
        if(currentNum > maxNum){
            maxNum = currentNum
        } 
    }
    return maxNum
};
最后更新时间: 8/18/2020, 11:02:31 PM