0487:最大连续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 <= 105nums[i]不是0就是1.
进阶:如果输入的数字是作为 无限流 逐个输入如何处理?换句话说,内存不能存储下所有从流中输入的数字。您可以有效地解决吗?
分析
用滑动窗口维护最多包含一个 0 的区间即可。
不过本题要求无限流,考虑用递推的方法:
- 令 dp[i][0] 代表以 i 结尾的最大连续 1 长度,dp[i][1] 代表以 i 结尾的最多包含一个 0 的最大连续长度
- dp[i] 只和 dp[i-1] 的状态有关,可以优化为两个参数
解答
|
|
80 ms