给定一个二进制数组 nums ,如果最多可以翻转一个 0 ,则返回数组中连续 1 的最大个数。
输入:nums = [1,0,1,1,0]
输出:4
解释:翻转第一个 0 可以得到最长的连续 1。
当翻转以后,最大连续 1 的个数为 4。
输入:nums = [1,0,1,1,0,1]
输出:4
- 1 <= nums.length <= 105
- nums[i] 不是 0 就是 1.
- 如果输入的数字是作为 无限流 逐个输入如何处理?换句话说,内存不能存储下所有从流中输入的数字。您可以有效地解决吗?
impl Solution {
pub fn find_max_consecutive_ones(nums: Vec<i32>) -> i32 {
let mut ans = 0;
let mut dp0 = 0;
let mut dp1 = 0;
for num in nums.into_iter() {
if num == 0 {
dp1 = dp0 + 1;
dp0 = 0;
} else {
dp0 += 1;
dp1 += 1;
}
ans = ans.max(dp0).max(dp1);
}
ans
}
}