# 485 最大连续1的个数
# 题目
给定一个二进制数组, 计算其中最大连续1的个数。
示例 1:
输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.
注意:
输入的数组只包含 0 和1。 输入数组的长度是正整数,且不超过 10,000。
# 题解
- 使用
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))
};
- 这次通过一次遍历找到值。
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
};