简单难度
题目描述
给定一个二进制数组 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
.
结果
- 使用快慢指针
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int res = 0, low = 0;
while (low < nums.size() && 0 == nums[low])
++low;
if (low == nums.size()) return 0;
int fast = low;
for (; fast < nums.size(); ++fast) {
if (fast > 0 && 0 == nums[fast] && 1 == nums[fast - 1])
res = max(res, fast - low);
if (fast > 0 && 0 == nums[fast - 1] && 1 == nums[fast])
low = fast;
if (fast == nums.size() - 1 && 1 == nums[fast])
res = max(res, fast - low + 1);
}
return res;
}
};
- 优化
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int res = 0, cnt = 0;
for (vector<int>::size_type i = 0; i < nums.size(); ++i) {
nums[i] && ++cnt;
0 == nums[i] && (res = max(res, cnt)) && (cnt = 0);
}
res = max(res, cnt);
return res;
}
};