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