LintCode: 883 Max Consecutive Ones

分析:本题题意是找到连续的1的个数,有1次将0翻转为1的机会。用一个通解来处理此类问题,k为可翻转的机会数目。此题k=1.

可以维护一个[left,right]的移动窗口来容纳k个0,遍历右边界,每当遇到0,就累加zero的个数,然后判断此时0的个数是否大于k,若大于k,则右移左边界left使其满足窗口内有k个0,如果移除掉的nums[left]为0,则zero--。然后用窗口中的数字个数来更新res。

public class Solution {
    /**
     * @param nums: a list of integer
     * @return: return a integer, denote  the maximum number of consecutive 1s
     */
    public int findMaxConsecutiveOnes(int[] nums) {
        // write your code here
        int left=0,numOfzero=0,k=1,res=0;
        for(int right=0;right<nums.length;right++){
            if(nums[right]==0)  ++numOfzero;
            while(numOfzero>k){
                if(nums[left++]==0){
                    numOfzero--;
                }
            }
            res=Math.max(res,right-left+1);
        }
        return res;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值