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

1、题目描述

        给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。

 2、算法思路

        不要去想题目中的应该怎么样反转0,我们应该是认为在一段连续区间中可以有0和1,但是0的个数不能超过k个就好了,因为是连续的区间,我们可以使用滑动窗口。

3、解题思路

        常用套路,进窗口,判断,出窗口,更新结果

        我们设左指针left和右指针right,其实就是下标。如果right此时指向是0元素,进窗口,如何判断区间目前0的个数,如果区间0的个数大于k个,那个left++,直到left一直走到0元素的位置,在更新结果。

4、算法代码

class Solution {
    public int longestOnes(int[] nums, int k) {
        int ret = 0,left=0,zero=0;
        for (int right=0; right < nums.length; ++right) {
            if (nums[right]==0) zero++; //进窗口,right下标指向的元素是0就zero++
            while (zero > k){//判断,区间内的0的个数
                if (nums[left] == 0) {//出窗口,left一直右移动直到找到下一个0原始
                    zero--;
                }
                 left++;
            }
            ret = Math.max(ret,right-left+1);//更新结果,和上一次的最大值比较,那个大就选那个
        }
        return ret;
    }
}

5、运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值