LeetCode刷题记录(三十九):最大连续 1 的个数

90 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情

最大连续 1 的个数

image.png

题目解析

题目难度:简单

题目素材解析

这道题提供的素材如下所示:

  1. 一个二进制数数组。

注:该数组的长度在1到10000之间,并且其中的元素非0即1。

我的解读

对于这道题其实并不难,只要搞清如何判断连续值即可。

必须要有一个历史值才行,因为只有历史值才能找出最大连续的数值。

解题思路

下面就要开始梳理一下解题思路了,代码编写需要更细致的解析。

根据上面的解读,我们下面就一步步的写一下解题思路。

第一步,先来声明两个整型变量result、count。

第二步,进入循环体,在循环体内判断是否等于1,如果等于1,则count变量自增。

第三步,如果不等于1,则result变量取值原值和count值的最大值,随后再将count赋值为0。

第四步,结束循环体,最后获取result和count值中的最大值即可获得预期结果。

代码

具体代码编写如下所示,大家可以自行运行试一下。

public class Test {

    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test.findMaxConsecutiveOnes(new int[]{1,0,1,1,1}));
    }

    public int findMaxConsecutiveOnes(int[] nums) {
        int result = 0, count = 0;
        for (int num : nums) {
            if (num == 1) {
                count++;
            } else {
                result = Math.max(result, count);
                count = 0;
            }
        }
        return Math.max(result, count);
    }

}

执行结果

今天这个执行结果还是不错的。

如果你想要更高性能,可以试一下直接获取到每一个0出现的位置,然后通过这个0的位置进行隔离数组的长度。

然后通过比对每一截的长度来获取到最大连续值。

只是个思路,没有形成代码,只能由大家自行去试一下了。

image.png