【LeetCode】最大连续1的个数Ⅰ~Ⅲ


最大连续1的个数★

LeetCode 485. 最大连续1的个数

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

示例

输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.

解题思路

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

最大连续1的个数Ⅱ★★

Leetcode 487.最大连续1的个数Ⅱ

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

示例

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

【解题思路】

class Solution {
    
    
	int findMaxConsecutiveOnes(int[] nums) {
    
    
        int le = 0, ri = 0;
        int res = 0, zero = 0;
        while(ri < nums.length) {
    
    
        	if(nums[ri++] == 0) zero++;
        	while(zero > 1) {
    
    
        		if(nums[le++] == 0) zero--;
        	}
        	res = Math.max(res, ri - le);
        }
		return res;
    }
}

最大连续1的个数Ⅲ★★

LeetCode 1004. 最大连续1的个数 III

题目】给定一个由若干 01 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。

返回仅包含 1 的最长(连续)子数组的长度。

示例

输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出:6
解释: 
[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6

解题思路】双指针+滑动窗口

class Solution {
    
    
    public int longestOnes(int[] A, int K) {
    
    
        int le = 0, ri = 0;
        int res = 0, zero = 0;
        while(ri < A.length) {
    
    
            if(A[ri++] == 0) zero++;
            while(zero > K) {
    
    
                if(A[le++] == 0) zero--;
            }
            res = Math.max(res, ri - le);
        }
        return res;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44368437/article/details/112851005