题目描述
给定一个二进制数组,计算其中最大连续 1 的个数。
样例
输入:[1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1,所以最大连续 1 的个数是 3。
说明
- 输入的数组只包含
0
和1
。 - 输入数组的长度是正整数,且不超过
10000
。
算法
(模拟) $O(n)$
- 定义一个计数器
cnt
表示当前连续 1 的个数。 - 遍历数组,如果
nums[i]
等于 1,则计数器加 1;否则,用cnt
更新答案,计数器清零。 - 注意遍历结束后仍需要用
cnt
更新一次答案。
时间复杂度
- 线性扫描一遍数组,时间复杂度为 $O(n)$。
空间复杂度
- 仅需要常数的额外空间。
C++ 代码
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int n = nums.size();
int cnt = 0, ans = 0;
for (int i = 0; i < n; i++) {
if (nums[i] == 1) {
cnt++;
} else {
ans = max(ans, cnt);
cnt = 0;
}
}
ans = max(ans, cnt);
return ans;
}
};