Day01 线性枚举_2

103 阅读3分钟

485. 最大连续 1 的个数

给定一个二进制数组 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.

Code

我的题解

class Solution {
public:
    int findMaxConsecutiveOnes(vector<int>& nums) {
        int n = nums.size();
        int maxCount = 0; // 用于记录最大连续1的个数
        int count = 0; // 用于记录当前连续1的个数

        for (int i = 0; i < n; ++i) {
            if (nums[i] == 1) {
                count++; // 如果当前元素是1,增加当前连续1的计数
            } else {
                // 如果遇到0,说明当前连续的1已经结束
                // 我们需要检查当前连续1的个数是否是最大的
                maxCount = max(maxCount, count);
                // 然后重置当前连续1的计数,以便开始新的计数
                count = 0;
            }
        }
        // 由于数组可能以连续的1结束,循环结束后我们需要再次检查
        // 是否需要更新最大连续1的个数
        maxCount = max(maxCount, count);

        // 返回最大连续1的个数
        return maxCount;

    }
};

这段代码的工作原理是:

  1. 初始化两个变量:maxCount用于记录遇到的最大连续1的个数,count用于记录当前遍历过程中连续1的个数。
  2. 使用一个for循环遍历数组nums中的每个元素。
  3. 在循环中,检查当前元素nums[i]是否为1:
    • 如果是1,就将count加1,表示当前连续的1又多了一个。
    • 如果不是1(即为0),就比较maxCountcount,并将maxCount更新为两者之间的较大值。这是因为我们刚刚结束了一段连续的1,需要检查它是否是我们遇到的最长的一段。然后,将count重置为0,因为我们需要重新开始计数下一段连续的1。
  4. 循环结束后,我们需要再次检查一下count,循环中的逻辑是在遇到0时才更新maxCount。如果数组的最后一个元素是1,那么在循环的最后一次迭代中,count会增加,但是由于后面没有0来触发更新maxCount的逻辑,循环结束时count可能包含了一段尚未被考虑的连续1的个数。所以,我们必须在循环结束后再进行一次比较,并更新maxCount
  5. 最后,函数返回maxCount,即数组中最大连续1的个数。

这样,无论数组中连续的1出现在哪里,或者数组如何结束,这段代码都能正确计算出最大连续1的个数。

力扣官方题解

class Solution {
public:
    int findMaxConsecutiveOnes(vector<int>& nums) {
        int maxCount = 0, count = 0;
        int n = nums.size();
        for (int i = 0; i < n; i++) {
            if (nums[i] == 1) {
                count++;
            } else {
                maxCount = max(maxCount, count);
                count = 0;
            }
        }
        maxCount = max(maxCount, count);
        return maxCount;
    }
};

英雄哪里出来

class Solution {
public:
    int findMaxConsecutiveOnes(vector<int>& nums) {
    	int count = 0, maxCount = 0;
    	for (int i = 0; i < nums.size(); ++i) {
    		if (nums[i] == 1) {
    			count++;
    			if (count > maxCount) {
					maxCount = count;
				}
			}else {
				count = 0;
			}
		}
		return maxCount;
    }
};