分析:本题题意是找到连续的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; } }