LeetCode题解 | [简单-数组] 485.最大连续1的个数

题目

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

示例 1:

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

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

思路

输入大致可分为这几种情况:

  1. 全是1
  2. 全是0
  3. 0开始0结束
  4. 0开始1结束
  5. 1开始0结束
  6. 1开始1结束

使用一个状态标记inOne来标识上一个位置是在0中还是在1中。
上一个位置为0且遇到1时,开始计数并转换状态。
上一个位置为1且遇到0时,计数完成,并将当前计数值与此前最大值比较,更新最大值。
循环结束后,需要特判,若最后一位是1,那么还要进行一次更新。

代码

/* 2020/10/24 */
class Solution {
public:
    int findMaxConsecutiveOnes(vector<int>& nums) {
        int maxConsecutive = 0;
        int cnt = 0;
        bool inOne = false;

        for (int i = 0; i < nums.size(); i++) {
            switch (nums[i]) {
                case 0:
                    if (true == inOne) {
                        maxConsecutive = max(maxConsecutive, cnt);
                        cnt = 0;
                    }
                    break;
                case 1:
                    ++cnt;
                    if (false == inOne) {
                        inOne = true;
                    }
                    break;
                default:
                    break;
            }
        }
        if (true == inOne) {
            maxConsecutive = max(maxConsecutive, cnt);
        }
        
        return maxConsecutive;
    }
};
上一篇:LeetCode 485. 最大连续1的个数-C语言


下一篇:485通信乱码/延时问题