Bootstrap

翻转k个0

题目描述

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

解题思路

统计当前窗口0的个数,0的个数大于k时,滑动窗口左移,0的个数减1。滑动窗口连续1的个数为right-left+1。

#include <stdio.h>
#include <stdlib.h>
int getResult(int* nums,int len,int k){
     int left=0;
     int right=0;
     int count=0;
     int maxlen=0;
     while(right<len){
          if(nums[right]==0)
               count++;
          while(count>k){
               if(nums[left]==0){
                    count--;
               }
                 left++;
          }
          maxlen=fmax(maxlen,right-left+1);
          right++;
     }
     return maxlen;
}
int main()
{
    int nums[100];
    int len=0;
    while(scanf("%d",&nums[len++])){
     if(getchar()!=' ')break;
    }
    int k;
    scanf("%d",&k);
    printf("%d",getResult(nums,len,k));
    return 0;
}

;