题目地址: 485. 最大连续1的个数
题目内容:
给定一个二进制数组nums,计算其中最大连续1的个数。
示例 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.
思路:
数组中有1和0,可以遍历数组将数组中的所有1拼接成字符串,期望结果类似
11-111-1-11
,然后获得1
的最长长度即可先遍历数组然后遇到不是
1
的项的话就拼接-
,否则就将1拼接上去得到类似11-111-1-11
的字符串然后通过
split
将字符串以-
分割成数组,最后通过reduce
求出数组中最大的长度即可
代码实现:
/**
* @param {number[]} nums
* @return {number}
*/
var findMaxConsecutiveOnes = function(nums) {
const str = nums.reduce((prev, cur) => {
// 如果当前不是1就忽略
if(cur !== 1) return `${prev}-`
return `${prev}${cur}`
}, '')
const strArr = str.split('-')
if(!strArr.length) return 0
return strArr.reduce((prev, cur) => Math.max(prev, cur.length), 0)
};
思路:
维护
两个变量
,一个变量maxCount
,一个变量currentNumCount
maxCount
表示已经遍历过的数字1的最大连续个数
currentNumCount
表示当前遍历到的连续数字1的个数最后返回它们当中最大的那个就行
代码实现:
/**
* @param {number[]} nums
* @return {number}
*/
var findMaxConsecutiveOnes = function(nums) {
// 已经遍历过的数字1最大连续个数
let maxCount = 0
// 当前遍历到的连续数字1的个数
let currentNumCount = 0
for(let i = 0; i < nums.length; i++) {
if(nums[i] === 1) {
currentNumCount++
}else {
maxCount = Math.max(maxCount, currentNumCount)
currentNumCount = 0
}
}
return Math.max(maxCount, currentNumCount)
};