289、最大连续 1 的个数

给定一个二进制数组 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.

来源:力扣(LeetCode)

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

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package cn.fansunion.leecode.todo;

/**

 * 485. 最大连续 1 的个数

 * 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

 力扣

 * @author wen.lei@brgroup.com

 *

 * 2022-2-26

 */

public class MaxConsecutiveOnes {

    /*  示例 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.*/

    /**

     * 遍历数组,维护当前最大1的个数和最大连续1的个数,返回max

     * @param nums

     * @return

     */

    public int findMaxConsecutiveOnes(int[] nums) {

        int currentConsecutiveOneSize=0;

        int maxConsecutiveOneSize=0;

        for(int num:nums) {

            if(num==1) {

                currentConsecutiveOneSize++;

                //性能考虑,1连续时没更新最大值,连续中断更新或最后更新1次即可

            }else {

                //遇到0,连续中断,更新最大值

                maxConsecutiveOneSize=Math.max(maxConsecutiveOneSize, currentConsecutiveOneSize);

                currentConsecutiveOneSize=0;

            }

        }

        //可能全都是1或最后一段全是1

        maxConsecutiveOneSize=Math.max(maxConsecutiveOneSize, currentConsecutiveOneSize);

        return maxConsecutiveOneSize;

    }

}

package test.leecode.number;

import org.junit.Assert;

import org.junit.Test;

import cn.fansunion.leecode.todo.MaxConsecutiveOnes;

/**

 * @author wen.lei@brgroup.com

 *

 * 2022-2-25

 */

public class MaxConsecutiveOnesTest {

    @Test

    public void test() {

        MaxConsecutiveOnes test = new MaxConsecutiveOnes();

        int[] nums0=new int[] {0,0,0,0,0};

        Assert.assertEquals(0, test.findMaxConsecutiveOnes(nums0));

        int[] nums1=new int[] {1,0,0,0,0};

        Assert.assertEquals(1, test.findMaxConsecutiveOnes(nums1));

        int[] nums11=new int[] {0,0,0,0,1};

        Assert.assertEquals(1, test.findMaxConsecutiveOnes(nums11));

         

        int[] nums2=new int[] {1,1,0,0,0};

        Assert.assertEquals(2, test.findMaxConsecutiveOnes(nums2));

        int[] nums21=new int[] {1,0,1,1,0};

        Assert.assertEquals(2, test.findMaxConsecutiveOnes(nums21));

        int[] nums22=new int[] {1,0,0,1,1};

        Assert.assertEquals(2, test.findMaxConsecutiveOnes(nums22));

         

        int[] nums3=new int[] {0,0,1,1,1};

        Assert.assertEquals(3, test.findMaxConsecutiveOnes(nums3));

        int[] nums31=new int[] {1,0,1,1,1};

        Assert.assertEquals(3, test.findMaxConsecutiveOnes(nums31));

        int[] nums32=new int[] {1,1,1,0,1};

        Assert.assertEquals(3, test.findMaxConsecutiveOnes(nums32));

         

        int[] nums6=new int[] {1,0,1,1,1,1,1,1};

        Assert.assertEquals(6, test.findMaxConsecutiveOnes(nums6));

        int[] nums7=new int[] {1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0};

        Assert.assertEquals(7, test.findMaxConsecutiveOnes(nums7));

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值