1004. 最大连续1的个数 III-滑动窗口双指针

Posted hequnwang10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1004. 最大连续1的个数 III-滑动窗口双指针相关的知识,希望对你有一定的参考价值。

一、题目描述

给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。

示例 1:
输入:nums = [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。
示例 2:
输入:nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出:10
解释:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10。

二、解题

滑动窗口

滑动窗口双指针,移动右指针,遇到1继续,遇到0,使用一个计数器计算0出现的个数,如果0出现的个数大于K,则移动左窗口,直至k缩减为k。动态记录滑动窗口的大小right- left+1;

class Solution 
    public int longestOnes(int[] nums, int k) 
        //滑动窗口
        int left = 0,right = 0,zcnt = 0;
        int size = 0;
        //记录0出现的次数,如果大于k就移动左边界,移动至不大于k的值。
        int length = nums.length;
        while(right < length)
            if(nums[right] == 0)
                zcnt++;
                while(zcnt > k)
                    if(nums[left] == 0)
                        zcnt--;
                    
                    left++;
                
            
            size = Math.max(size,right - left + 1);
            right++;
        
        return size;
    

时间复杂度:O(n);

空间复杂度:O(1)。

以上是关于1004. 最大连续1的个数 III-滑动窗口双指针的主要内容,如果未能解决你的问题,请参考以下文章

javaleetcode1004. 最大连续1的个数 III;2024. 考试的最大困扰度

javaleetcode1004. 最大连续1的个数 III;2024. 考试的最大困扰度

1004.最大连续1的个数III

1004. 最大连续1的个数 III

[滑动窗口] leetcode 1004 Max Consecutive Ones III

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