题目描述
给定一个二进制数组, 计算其中最大连续 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; }
标签:nums,int,max,个数,maxLen,num,485,Leetcode From: https://www.cnblogs.com/wdh01/p/17472737.html