题目
给定一个二进制数组, 计算其中最大连续1的个数。
示例 1:
输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.
注意:
输入的数组只包含 0 和1。
输入数组的长度是正整数,且不超过 10,000。
思路
输入大致可分为这几种情况:
- 全是1
- 全是0
- 0开始0结束
- 0开始1结束
- 1开始0结束
- 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;
}
};