• JAVA基础算法(7)----- 最大连续 1 的个数( 优化版 )



    ​​​​​

    最大连续 1 的个数

    活动地址:CSDN21天学习挑战赛

    一、题目

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

    二、解题

    • 首先解读一下这个题目 ----- 计算最大连续 1 的个数,这个题目很简单无非是遍历一遍对 1 的个数进行遍历利用一个变量记录最大情况、一个变量记录当前 1 的连续个数;
    • 但是我这边打算使用的是另外一个方法,寻找每一个 0 的坐标位置,利用 0 的坐标位置减去当前 0 的前一个 0 之后的第一个 1 的坐标位置;
    • 也就是说一个( 0,1,1,1,0 )的数组,我们在遍历到第二个 0 的时候,利用其坐标数值 4 减去它前一个 0 之后的坐标,因为它前一个 0 之后要么是 1 要么就是它本身,像这个数组就是坐标数值为 1 的元素,即当前数组连续 1 的最大个数为 4 - 1 = 3 ;

    2.1

    • 由力扣网给出的模板我们可以看出要求是编写一个方法,在方法内传有一个数组,该数组为需要计算连续 1 个数的二进制数组;

    在这里插入图片描述

    图 2.1

    2.2

    • 声明一个变量,用于记录数组的长度;
    • 声明一个变量,用于记录最大连续 1 的个数,该变量需要进行初始化为 0 ,表示当前最大连续 1 的个数为 0 ;
    • 建立一个变量,用于记录当前第一个 1 的位置,赋初值为 0 ;(在这个变量当中存储的坐标对应的值不一定就是 1 ,但是我们可以将其假设为是 1 的情况

    在这里插入图片描述

    图 2.2

    2.3

    • 我们遍历整个数组,找出每一个为 0 的位置;
    • 因为用当前 0 的坐标号减去所记录的位置坐标,如果大于最大值则将这个值赋值至最大值当中;
    • 只要当前位置为 0 ,就表示所记录的坐标位置需要改变,将存储坐标位置的变量赋值为当前 0 的坐标号加一;(跟之前一样的原理,我们假设 0 后面一个位置存储的元素就是一个 1 ,哪怕后一个位置的元素不为 1 ,那该位置的元素一定为 0 ,按之前总结的性质计算当前连续 1 的个数时是同一个坐标号进行相减,那么得数也就为 0

    在这里插入图片描述

    图 2.3

    2.4

    • 当遍历完之后,如果最后一个元素为 1 ,那么就会少计算一次连续为 1 的个数;
    • 这时我们可以用数组长度减去所记录的坐标号即可得到当前连续为 1 的个数,再用这个数去跟最大情况相对比;
    • 最后将所获得的最大个数返回至主函数;

    在这里插入图片描述

    图 2.4

    三、代码分享及力扣评分

    3.1 力扣评分

    在这里插入图片描述

    图 3.1

    3.2 代码分享

    class Solution {
        public int findMaxConsecutiveOnes(int[] nums) {
            int len = nums.length;
            int max = 0;
            int count = 0;
    
            
            for( int i = 0 ; i < len ; i++ ){
                if( nums[i] == 0 ){
                    if( i - count > max )
                        max = i - count;
                    count = i + 1;
                }
            }
            if( len - count > max )
                max = len - count;
            return max;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    批量拉取所有子目录 git pull --all
    ArcGIS 10.3软件安装包下载及安装教程!
    Shell 脚本案例
    信息论基础(Part2)
    Redis 访问控制列表(ACL)
    鸿蒙App动画、弹窗
    UNIAPP day_02(8.31) 条件编辑、数据绑定、生命周期方法
    mybatis插入数据不返回主键id可能原因及解决
    linux-守护进程daemon
    RabbitMQ内容
  • 原文地址:https://blog.csdn.net/jc15274630894/article/details/126284135