在问 · 算法题解

485. 最大连续 1 的个数

题目描述

输入只含 0 和 1 的数组 nums。

找出由 1 组成的连续段中最长的一段,返回它的长度。数组中没有 1 时返回 0。

示例 1
输入:nums = [1,1,0,1,1,1]
输出:3

解释:开头有两个连续的 1,末尾有三个,最长为 3。

示例 2
输入:nums = [1,0,1,1,0,1]
输出:2

解释:最长的一段 1 是中间的两个。

数据范围

  • 1 <= nums.length <= 10^5
  • nums[i] 只会是 0 或 1。

解题思路

从左到右扫一遍,用 cur 记录“以当前位置结尾的连续 1 的长度”。遇到 1 就 cur += 1,并用它更新答案 best;遇到 0 连续段断开,cur 归零。

为什么正确

处理完 nums[i] 后,cur 是以 i 结尾的连续 1 的长度,best 是 nums[0..i] 中最长连续 1 的长度。

复杂度分析

时间 O(n),空间 O(1)。

易错点

如果只在遇到 0 时才更新答案,会漏掉以数组末尾结束的那一段;全是 0 时答案为 0。

参考代码

Python、Java、C++、Go、JavaScript、TypeScript 六种语言,逻辑一致。

class Solution:
    def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
        best = cur = 0
        for x in nums:
            if x == 1:
                cur += 1
                best = max(best, cur)
            else:
                cur = 0
        return best

载入编辑器,自己跑一遍 →

数组与矩阵 专题的其他题目

查看 数组与矩阵 全部题目 →