​LeetCode刷题实战487:最大连续1的个数 II

本文介绍了LeetCode上的一个算法问题——最大连续1的个数II,讨论如何在能翻转一个0的情况下找到二进制数组中最大连续1的个数。通过提供解题思路和代码实现,讲解了如何利用动态规划的思想解决此类问题。
摘要由CSDN通过智能技术生成

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 最大连续1的个数 II,我们先来看题面:

https://leetcode-cn.com/problems/max-consecutive-ones-ii/

Given a binary array, find the maximum number of consecutive 1s in this array if you can flip at most one 0.

给定一个二进制数组,你可以最多将 1 个 0 翻转为 1,找出其中最大连续 1 的个数。

示例                         

输入:[1,0,1,1,0]
输出:4
解释:翻转第一个 0 可以得到最长的连续 1。
     当翻转以后,最大连续 1 的个数为 4。

解题

这道题在之前那道题 Max Consecutive Ones 的基础上加了一个条件,说有一次将0翻转成1的机会,问此时最大连续1的个数,再看看 follow up 中的说明,很明显只遍历一次数组,那我们想,肯定需要用一个变量 cnt 来记录连续1的个数吧,那么当遇到了0的时候怎么处理呢,因为有一次0变1的机会,所以遇到0了还是要累加 cnt,然后此时需要用另外一个变量 cur 来保存当前 cnt 的值,然后 cnt 重置为0,以便于让 cnt 一直用来统计纯连续1的个数,然后我们每次都用用 cnt+cur 来更新结果 res,参见代码如下:

class Solution {
public:
    int findMaxConsecutiveOnes(vector<int>& nums) {
        int res = 0, cur = 0, cnt = 0;
        for (int num : nums) {
            ++cnt;
            if (num == 0) {
                cur = cnt;
                cnt = 0;
            } 
            res = max(res, cnt + cur);
        }
        return res;
    }
};

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-480题汇总,希望对你有点帮助!

LeetCode刷题实战481:神奇字符串

LeetCode刷题实战482:密钥格式化

LeetCode刷题实战483:最小好进制

LeetCode刷题实战484:寻找排列

LeetCode刷题实战485:最大连续 1 的个数

LeetCode刷题实战486:预测赢家

845b63e121cf6892399ce49a0ec87629.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值