Skip to content

Latest commit

 

History

History
51 lines (40 loc) · 1.1 KB

max-consecutive-ones-ii.md

File metadata and controls

51 lines (40 loc) · 1.1 KB

487. 最大连续1的个数 II

给定一个二进制数组 nums ,如果最多可以翻转一个 0 ,则返回数组中连续 1 的最大个数。

示例 1:
输入:nums = [1,0,1,1,0]
输出:4
解释:翻转第一个 0 可以得到最长的连续 1。
当翻转以后,最大连续 1 的个数为 4。
示例 2:
输入: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
    }
}