Leetcode_485. 最大连续 1 的个数

发布时间 2023-08-27 15:57:04作者: 晓枫的春天

题目描述

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

示例:

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

提示:

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

参考实现

示例1

由于要累计最大连续 1 的个数,且数组元素只有0,1,遇到不连续的时候,需要标记之前连续1的长度,借助小学数学知识 num * 0 = 0 的知识,可以实现如下

class Solution:
    def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
        '''
        返回最含485. 最大连续 1 的个数
        :param nums:0 ,1 组成的列表
        :return:最大连续 1 的个数
        '''
        num, maxLen = 0, 0
        for i in nums:
            '''
            遇到元素为 0,num 则为 0
            否则:num 为连续1的个数
            比如 nums = [0,1,1,0]
            nums[0] = 0:num = 0,maxLen = 0
            nums[1] = 1;num = 1,maxLen = 1 
            nums[2] = 1;num = 2,maxLen = 2 
            nums[3] = 0;num = 0,maxLen = 2 (此时 num > maxLen 不满足,不会执行maxLen = num)
            '''
            num = num * i + i
            if num > maxLen:
                maxLen = num
        return maxLen

 另一种实现 

def findMaxConsecutiveOnes01(nums: List[int]) -> int:
    if nums is None or len(nums) == 0:
        return 0
    else:
        num, max_num = 0, 0

        for i in range(0, len(nums)):
            if nums[i] == 1:
                num += 1
            else:
                num = 0
            max_num = max(num, max_num)
        return max_num

Java 实现

    public static int findMaxConsecutiveOnes(int[] nums) {
        int m = 0, n = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 1) {
                m++;
            } else {
                m = 0;
            }
            n = Math.max(m, n);
        }
        return n;
    }