力扣第42刷-最大连续 1 的个数

简介: 力扣第42刷-最大连续 1 的个数

Example 42

最大连续 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的个数,需要遍历数组,并记录最大的连续1的个数和当前的连续1的个数。如果当前元素是1,则将当前的连续1的个数加1,否则,使用之前的连续1的个数更新最大的连续1的个数,并将当前的连续1的个数清零。

遍历数组结束之后,需要再次使用当前的连续1的个数更新最大的连续1的个数,因为数组的最后一个元素可能是1,且最长连续1的子数组可能出现在数组的末尾,如果遍历数组结束之后不更新最大的连续1的个数,则会导致结果错误。

示例代码如下:

public class MaxConsecutiveOnes {
    /**
     * 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
     * 示例 1:
     * 输入:nums = [1,1,0,1,1,1]
     * 输出:3
     * 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
     * 示例 2:
     * 输入:nums = [1,0,1,1,0,1]
     * 输出:2
     * 来源:力扣(LeetCode)
     * 链接:https://leetcode.cn/problems/max-consecutive-ones
     */
    public static void main(String[] args) {
        MaxConsecutiveOnes mco = new MaxConsecutiveOnes();
        System.out.println(mco.findMaxConsecutiveOnes(new int[]{1, 1, 0, 1, 1, 1})); // 3
    }
    /**
     * 官方
     *
     * @param nums
     * @return
     */
    public int findMaxConsecutiveOnes(int[] nums) {
        int maxCount = 0, count = 0;
        int n = nums.length;
        for (int i = 0; i < n; i++) {
            if (nums[i] == 1) {
                count++;
            } else {
                maxCount = Math.max(maxCount, count);
                count = 0;
            }
        }
        maxCount = Math.max(maxCount, count);
        return maxCount;
    }
}
相关文章
|
7月前
|
算法 测试技术
LeetCode-1004. 最大连续1的个数 III
LeetCode-1004. 最大连续1的个数 III
|
7月前
leetcode-485:最大连续1的个数
leetcode-485:最大连续1的个数
49 0
|
7月前
【力扣】485.最大连续 1 的个数
【力扣】485.最大连续 1 的个数
【力扣每日一题:2-19】1004. 最大连续1的个数 III【中等】
【力扣每日一题:2-19】1004. 最大连续1的个数 III【中等】
Leetcode——485. 最大连续 1 的个数
文章目录 1、题目 2、滑动窗口 3、一次遍历(官方题解)
Leetcode——485. 最大连续 1 的个数
|
人工智能 算法 vr&ar
每日算法系列【LeetCode 1004】最大连续1的个数 III
每日算法系列【LeetCode 1004】最大连续1的个数 III
LeetCode 485. 最大连续 1 的个数 - 暴力法
定义两个变量 thisSum 每次遍历中的最大值 maxSum 返回值,所有遍历结果中的最大值
Leetcode-每日一题769. 最多能完成排序的块(贪心)
需要怎么分割序列才是个问题,题目其实给了提示因为序列里的数只能是[0, n-1]所以选择[l, r] 连续的序列中的数一定是 [l, r] 这段区间的数字,所以我们只需要遍历数组,去找这段区间内最大的数字,即边界值r,因为他才是决定边界的数字,每次我们到达了r这个位置就表示下一段区间。
68 0
Leetcode-每日一题769. 最多能完成排序的块(贪心)
|
存储 算法 Python
力扣刷题记录——190. 颠倒二进制位、191. 位1的个数、202. 快乐数
力扣刷题记录——190. 颠倒二进制位、191. 位1的个数、202. 快乐数
127 0
力扣刷题记录——190. 颠倒二进制位、191. 位1的个数、202. 快乐数