JAVA_滑动窗口_最大连续1的个数

题目:

解析:

        这道题我们只要记录0的值不超过题目给的k值,就能得到它最大连续1的最大个数。

        首先创建双指针left和right同时指向0下标和一个记录0次数的zero还有记录长度的len,再进入right循环(进入窗口),当遇到0值的时候,zero就+1,但zero的值超过题目中给的k值时,判断left位置的值是否等于0,如果不是left就进一步,如果是,zero就-1,left进一步。但zero的值不超过k值时(代表退出窗口),就记录下len的最长长度。

代码:

class Solution {
    public int longestOnes(int[] nums, int k) {
        int left=0,right=0,n=nums.length,zero=0;//创建双指针和记录k的次数
        int ret=0;//返回的最长长度
        for(;right<n;right++){//进入窗口
            if(nums[right]==0){
                zero++;
            }//如果遇到0 zero就++
            while(zero>k){
                if(nums[left++]==0) zero--;
            }//判断是否超过题目给的值,如果left的下标为0,zero就-1,每次while循环一次left就进一步
            ret=Math.max(ret,right-left+1);//取最大长度
        }    
        return ret;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值