Skip to content
On this page

485-最大连续 1 的个数

标签:数组

题目信息

题目地址485. 最大连续1的个数

题目内容:

javascript
给定一个二进制数组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求出数组中最大的长度即可

代码实现:

javascript
/**
 * @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的个数

最后返回它们当中最大的那个就行

代码实现:

javascript
/**
 * @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)
    };